asynchronousshell命令

我真的不能相信我无法find这个在线的解决scheme。 我遇到了一些看起来很相似的东西,但没有什么真正做我想要的东西…

我正在尝试使用shell脚本来启动一个命令。 我不在乎是否/何时/如何/为什么完成。 我想要启动和运行这个进程,但我希望能够立即返回到我的shell中。

希望这一点足够清楚,我可能只是失去了一些令人难以置信的愚蠢

你可以在后台运行脚本:

 $ myscript & 

请注意,这是不同于放在你的脚本,这可能不会做你想要的。

 nohup cmd 

closuresterminal时不挂机。 默认输出到nohup.out

你可以结合这个背景,

 nohup cmd & 

摆脱产出,

 nohup cmd > /dev/null 2>&1 & 

你也可以disown一个命令。 键入cmdCtrl-Zbgdisown

或者,在程序运行后,您可以按Ctrl-Z键停止程序,然后键入

BG

这将您最后停止的程序放在后台。 (有用的,如果你开始的东西没有'&',仍然希望在背景下,而不重新启动它)

大家都忘记了。 所以这里是一个总结:

  • &把工作放在后台。

    • 使其尝试读取input时阻塞
    • 使壳不等待完成。
  • disown知道从shell的作业控制中删除了这个进程,但是它仍然把它连接到terminal。

    • 其中一个结果是shell不会发送SIGHUP (如果shell收到一个SIGHUP ,它也会向进程发送SIGHUP ,这通常会导致进程终止)。
    • 显然,它只能应用于后台作业(因为在前台作业运行时无法input)。
  • nohup从terminal断开进程,将其输出redirect到nohup.out并将其从SIGHUP屏蔽。

    • 该过程将不会收到任何发送的SIGHUP
    • 它完全独立于工作控制,原则上也可以用于前台工作(虽然这不是很有用)。
    • 通常用于& (作为后台作业)。