问题描述
我的理解是,当您在给定的 shell(比如 bash)中运行任何命令(比如 <div class="parent">
<input id="date" type="date" min="" max="2021-07-31" name="APPOINTMENTDATE" data-field-type="Text">
</div>
)时,幕后发生的事情是调用 fork 系统调用,并且 sleep 10
现在作为子进程运行,父进程是我执行睡眠的 bash shell。
现在,如果我想将 sleep 10
发送到后台,我会执行 sleep
或运行 sleep 10 &
并按 ctrl+z 以便将进程发送到后台。 pstree 显示使用这些选项中的任何一个,sleep 一直是 bash shell 的子进程。
现在我的问题是,在通过 SSH 执行此操作时,我注意到以下几点:
如果我这样做:sleep 10
和 sleep 999 &
sleep 888 幸存下来。
这是为什么?我实际上期待其中之一:
- 两个进程都因为父进程消失而终止
- 两个进程都作为父进程与 init 相关联。
解决方法
或者运行 sleep 10 并按 ctrl+z 将进程发送到后台
不,不是真的。没看到“[1]+ Stopped sleep 10”的大消息吗? ctrl+z
停止进程并返回到当前 shell。您现在可以键入 fg
以继续处理,或键入 bg
以在后台继续处理。研究“bash 作业控制”并查看 bash 手册作业控制基础。
这是为什么?
停止的进程首先继续 SIGCONT
,然后将 SIGTERM
发送给它们,以便它们可以终止。
Bash 手册可在线获取:https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html .