asynchronousshell命令
我真的不能相信我无法find这个在线的解决scheme。 我遇到了一些看起来很相似的东西,但没有什么真正做我想要的东西…
我正在尝试使用shell脚本来启动一个命令。 我不在乎是否/何时/如何/为什么完成。 我想要启动和运行这个进程,但我希望能够立即返回到我的shell中。
希望这一点足够清楚,我可能只是失去了一些令人难以置信的愚蠢
你可以在后台运行脚本:
$ myscript &
请注意,这是不同于放在你的脚本,这可能不会做你想要的。
nohup cmd
closuresterminal时不挂机。 默认输出到nohup.out
你可以结合这个背景,
nohup cmd &
摆脱产出,
nohup cmd > /dev/null 2>&1 &
你也可以disown
一个命令。 键入cmd
, Ctrl-Z
, bg
, disown
或者,在程序运行后,您可以按Ctrl-Z键停止程序,然后键入
BG
这将您最后停止的程序放在后台。 (有用的,如果你开始的东西没有'&',仍然希望在背景下,而不重新启动它)
大家都忘记了。 所以这里是一个总结:
-
&
把工作放在后台。- 使其尝试读取input时阻塞
- 使壳不等待完成。
-
disown
知道从shell的作业控制中删除了这个进程,但是它仍然把它连接到terminal。- 其中一个结果是shell不会发送
SIGHUP
(如果shell收到一个SIGHUP
,它也会向进程发送SIGHUP
,这通常会导致进程终止)。 - 显然,它只能应用于后台作业(因为在前台作业运行时无法input)。
- 其中一个结果是shell不会发送
-
nohup
从terminal断开进程,将其输出redirect到nohup.out
并将其从SIGHUP
屏蔽。- 该过程将不会收到任何发送的
SIGHUP
。 - 它完全独立于工作控制,原则上也可以用于前台工作(虽然这不是很有用)。
- 通常用于
&
(作为后台作业)。
- 该过程将不会收到任何发送的