终端关闭时,会向上面的进程发送SIGHUP (SIGnal Hang UP),这个信号的默认行为是终止进程。用nohup运行的命令就忽略了SIGHUP信号,这样父终端退出之后就挂到init进程上。
但是如果终端是被杀死的,比如kill -9
,那么SIGHUP不一定会被发送给子进程,这时子进程就直接变成孤儿进程,被init进程收养了。
参考:
https://baike.baidu.com/item/SIGHUP/10181604
https://en.wikipedia.org/wiki/SIGHUP
https://baike.baidu.com/item/nohup/5683841
https://baike.baidu.com/item/%E5%AD%A4%E5%84%BF%E8%BF%9B%E7%A8%8B