我有以下的进程树
test1.sh
\- test2.sh
\- sleep 600
通常情况下,如果我杀死test1.sh进程,子进程test2.sh和sleep 600将继续运行。但是,如果我通过发送信号(SIGSTOP或SIGTSTP)暂停sleep 600进程,然后杀死test1.sh进程,子进程test2.sh和sleep 600将会退出。为什么会这样呢?
这是我的测试程序: test1.sh
#!/bin/sh
./test2.sh
test2.sh
#!/bin/sh
sleep 600
测试步骤:
运行 test1.sh
$ ./test1.sh
打开新控制台并暂停子进程。
$ kill -19 < sleep pid > 或 kill -20 < sleep pid >
关闭父进程 test1.sh
$ kill < test1.sh pid >
在第3步之后,你会发现 test2.sh 和 sleep 600 已经退出。
如果我只运行第1步和第3步,忽略第2步,那么 test2.sh 和 sleep 600 进程将无法退出。
有人能解释一下吗?非常感谢。