linux 中 ctrl-z 和“&”的区别
Difference between ctrl-z and "&" in linux
我的理解是,当您在给定的 shell(例如 bash)中 运行 执行任何命令(例如 sleep 10
)时,幕后发生了什么是调用了一个 fork 系统调用,sleep 10
现在 运行ning 作为子进程,父进程是 bash shell 我执行了睡眠。
现在,如果我想将 sleep
发送到后台,我会执行 sleep 10 &
或 运行 sleep 10
然后按 ctrl+z,这样过程是发送到后台。 pstree 显示使用这些选项中的任何一个,sleep 一直是 bash shell.
的子进程
现在我的问题是,当通过 SSH 执行此操作时,我注意到以下内容:
如果我这样做:sleep 999 &
和 sleep 888
<- 然后是 ctrl+z,然后关闭 ssh 会话,只有 sleep 999 &
幸存下来。
这是为什么?我实际上期待其中之一:
- 两个进程都被终止,因为父进程已经消失
- 两个进程都作为父进程关联到 init。
or run sleep 10 and press ctrl+z so the process is sent to the background
不,不是真的。你没看到那个大消息说“[1]+ Stopped sleep 10”吗? ctrl+z
停止 进程并returns 你到当前shell。您现在可以键入 fg
以继续进程,或键入 bg
以在后台继续进程。研究“bash 作业控制”并参阅 bash 手册作业控制基础。
Why is this?
停止的进程首先继续 SIGCONT
,然后 SIGTERM
发送给它们以便它们可以终止。
Bash 在线提供手册:https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html .
我的理解是,当您在给定的 shell(例如 bash)中 运行 执行任何命令(例如 sleep 10
)时,幕后发生了什么是调用了一个 fork 系统调用,sleep 10
现在 运行ning 作为子进程,父进程是 bash shell 我执行了睡眠。
现在,如果我想将 sleep
发送到后台,我会执行 sleep 10 &
或 运行 sleep 10
然后按 ctrl+z,这样过程是发送到后台。 pstree 显示使用这些选项中的任何一个,sleep 一直是 bash shell.
现在我的问题是,当通过 SSH 执行此操作时,我注意到以下内容:
如果我这样做:sleep 999 &
和 sleep 888
<- 然后是 ctrl+z,然后关闭 ssh 会话,只有 sleep 999 &
幸存下来。
这是为什么?我实际上期待其中之一:
- 两个进程都被终止,因为父进程已经消失
- 两个进程都作为父进程关联到 init。
or run sleep 10 and press ctrl+z so the process is sent to the background
不,不是真的。你没看到那个大消息说“[1]+ Stopped sleep 10”吗? ctrl+z
停止 进程并returns 你到当前shell。您现在可以键入 fg
以继续进程,或键入 bg
以在后台继续进程。研究“bash 作业控制”并参阅 bash 手册作业控制基础。
Why is this?
停止的进程首先继续 SIGCONT
,然后 SIGTERM
发送给它们以便它们可以终止。
Bash 在线提供手册:https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html .