【问题标题】:Difference between ctrl-z and "&" in linuxlinux中ctrl-z和“&”的区别
【发布时间】:2021-06-25 05:01:10
【问题描述】:

我的理解是,当您在给定的 shell(比如 bash)中运行任何命令(比如 sleep 10)时,幕后发生的事情是调用了 fork 系统调用,而 sleep 10 现在运行为一个子进程,父进程是我执行睡眠的 bash shell。

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

现在我的问题是,通过 SSH 执行此操作时,我注意到以下几点: 如果我这样做:sleep 999 &sleep 888 sleep 999 & 幸存。

这是为什么?我实际上期待其中之一:

  • 两个进程都因父进程消失而终止
  • 两个进程都作为父进程关联到 init。

【问题讨论】:

  • 确定你在使用 bash 吗?
  • Ctrl+Z 停止前台作业。除非您恢复它,否则它将是一个停止的作业,而不是后台作业。

标签: linux bash shell process


【解决方案1】:

或运行 sleep 10 并按 ctrl+z 以便将进程发送到后台

不,不是真的。您没有看到“[1]+ 已停止 sleep 10”的大消息吗? ctrl+z 停止 进程并将您返回到当前 shell。您现在可以键入 fg 继续进程,或键入 bg 以在后台继续进程。研究“bash 作业控制”并查看 bash 手册作业控制基础知识。

这是为什么?

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

Bash 手册可在线获取:https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2013-03-17
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多