【问题标题】:How to prevent nohup from "clogging" the command line?如何防止 nohup “阻塞”命令行?
【发布时间】:2016-04-11 15:46:50
【问题描述】:

我想编写一个在后台运行两个命令的 bash 脚本。我为此使用 nohup:

nohup cmd1 &
nohup cmd2 &

但是,只有第一个命令在后台运行。

当我在命令行中手动运行nohup cmd1 & 时。首先,我输入nohup cmd1 & 然后回车;这开始了这个过程:

但是,我需要再次输入 才能输入另一个命令:

我认为这是“阻塞”命令行,导致我的 bash 脚本卡在第一个 nohup ... & 命令处。

有没有办法防止这种情况发生?

【问题讨论】:

  • 你能在 nohup 命令之间尝试类似:sleep 5 吗?
  • @ryekayo 它永远被堵塞了,而不是只有 5 秒。
  • 无需回车;移动光标的文本令人不安但无害。

标签: bash background-process nohup


【解决方案1】:

没有什么是“堵塞”的。第一个命令在后台运行,你的 shell 打印下一个提示之后打印一些输出。即使光标不再与提示符位于同一行,shell 仍在等待您键入命令。额外的 Enter 是一个空命令,导致 shell 打印 another 提示符。它无害但没有必要。

【讨论】:

    【解决方案2】:

    让我对nohup 说几句话,因为我不确定你是否确定它在做什么。简而言之,nohup 命令不是在后台运行进程所必需的。行尾的 & 号正在执行此操作。

    nohup 阻止后台进程接收SIGHUP(hup for hang up)如果您关闭启动 shell 运行它的终端。 SIGHUP 将有效地终止进程。

    如果以nohup 启动,则该进程将不会收到该事件并将继续运行,如果终端将关闭,则由 init 进程 (pid 1) 拥有。

    此外,nohup 命令会将受控进程的标准输出重定向到文件,这意味着它不会再出现在屏幕上。默认情况下,此文件名为nohup.out

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 2015-04-22
      • 2016-10-26
      • 1970-01-01
      相关资源
      最近更新 更多