微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux中ctrl-z和“&”的区别

如何解决linux中ctrl-z和“&”的区别

我的理解是,当您在给定的 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 10sleep 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 .

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。