【发布时间】:2021-06-25 05:01:10
【问题描述】:
我的理解是,当您在给定的 shell(比如 bash)中运行任何命令(比如 sleep 10)时,幕后发生的事情是调用了 fork 系统调用,而 sleep 10 现在运行为一个子进程,父进程是我执行睡眠的 bash shell。
现在,如果我想将sleep 发送到后台,我会执行sleep 10 & 或运行sleep 10 并按ctrl+z 以便将进程发送到后台。 pstree 表明,使用这些选项中的任何一个,sleep 一直是 bash shell 的子进程。
现在我的问题是,通过 SSH 执行此操作时,我注意到以下几点:
如果我这样做:sleep 999 & 和 sleep 888 sleep 999 & 幸存。
这是为什么?我实际上期待其中之一:
- 两个进程都因父进程消失而终止
- 两个进程都作为父进程关联到 init。
【问题讨论】:
-
你确定你在使用 bash 吗?
-
Ctrl+Z 停止前台作业。除非您恢复它,否则它将是一个停止的作业,而不是后台作业。