Sim*_*ate 3 linux bash shell process
我的理解是,当您sleep 10在给定的 shell(比如 bash)中运行任何命令(比如 )时,幕后发生的事情是调用 fork 系统调用,并且sleep 10现在作为子进程运行,父进程是 bash shell我执行了sleep。
现在,如果我想发送sleep到后台,我可以执行sleep 10 &或运行sleep 10并按 ctrl+z,以便将进程发送到后台。pstree 显示,使用这些选项中的任何一个,sleep 都会继续成为 bash shell 的子进程。
现在我的问题是,当通过 SSH 执行此操作时,我注意到以下内容: 如果我这样做:sleep 999 &并且sleep 888<- 后跟 ctrl+z,并关闭 ssh 会话,则只能sleep 999 &幸存。
为什么是这样?我实际上期待其中之一:
或者运行 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。
| 归档时间: |
|
| 查看次数: |
10284 次 |
| 最近记录: |