我的理解是,当您在给定的shell(比如bash)中运行任何命令(比如
sleep 10
)时,底层发生的情况是调用了一个fork系统调用,sleep 10
现在作为子进程运行,其父进程是我执行sleep的bash shell。
现在,如果我想将sleep
发送到后台,我会使用sleep 10 &
或者运行sleep 10
并按下ctrl+z,这样进程就被发送到后台。pstree显示,使用这些选项之一,sleep仍然是bash shell的子进程。
现在我的问题是,在通过SSH进行此操作时,我注意到以下内容:
如果我执行:sleep 999 &
和sleep 888
<- 然后按下ctrl+z,并关闭ssh会话,只有sleep 999 &
幸存下来。
为什么会这样?实际上,我期望以下情况之一发生:
- 两个进程都被终止,因为父进程已经消失了
- 两个进程都与init关联为父进程。