gpt4 book ai didi

linux - linux中ctrl-z和 "&"的区别

转载 作者:行者123 更新时间:2023-12-01 23:20:45 24 4
gpt4 key购买 nike

我的理解是,当您在给定的 shell(比如 bash)中运行任何命令(比如 sleep 10)时,底层发生的事情是调用 fork 系统调用,并且 sleep 10 现在作为子进程运行,父进程是我执行 sleep 的 bash shell。

现在,如果我想将 sleep 发送到后台,我会执行 sleep 10 & 或运行 sleep 10 并按 ctrl +z 所以进程被发送到后台。 pstree 显示使用这些选项中的任何一个,sleep 一直是 bash shell 的子进程。

现在我的问题是,当通过 SSH 执行此操作时,我注意到以下内容:如果我这样做:sleep 999 &sleep 888 <- 然后按 ctrl+z,然后关闭 ssh session ,只有 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 停止 进程并返回到当前 shell。您现在可以键入 fg 以继续进程,或键入 bg 以在后台继续进程。研究“bash 作业控制”并查看 bash 手册作业控制基础知识。

Why is this?

停止的进程首先继续 SIGCONT,然后向它们发送 SIGTERM,以便它们可以终止。

在线提供 Bash 手册:https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html .

关于linux - linux中ctrl-z和 "&"的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68125700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com