在通过fork()完成的parent > child process
关系中,我阅读了以下内容:
如果父进程被杀死,则子进程将成为init进程(其进程ID为1,并由内核作为第一个用户进程启动)的子进程。
当我使用终端运行程序时,它会分叉并执行新的二进制文件。 为什么当我关闭终端时子进程也终止了?根据上面 信息,为什么它不成为根进程的子代?
我也读过:
当您以常规退出方式关闭bash时,它会触发SIGHUP挂起信号通知其所有作业。
那么一天结束时会发生什么?成为根进程的子进程还是死亡?这些陈述彼此紧缩。
答案 0 :(得分:0)
关闭终端后,在终端中运行的shell会收到SIGHUP。该信号被“广播”到在该外壳中启动的所有进程(子进程)。由于SINGHUP在默认情况下是Termination Signal,因此如果不执行其他任何操作,程序将中止。
可以使用 nohup (man nohup)命令启动应用程序以使其具有SIGHUP抵抗力,或者将其设置为自己的信号处理程序。