问题描述
老实说,我不敢相信我无法在网上找到解决方案。我遇到了一些看似相似的事情,但没有任何事情能真正实现我想要的…
我正在尝试使用Shell脚本来启动命令。我不在乎是否/何时/如何/为什么完成。我希望该过程开始并运行,但是我希望能够立即回到我的 shell …
希望这已经足够清楚了,我可能只是想念一些非常愚蠢的东西
最佳回答
您可以只在后台运行脚本:
$ myscript &
请注意,这与将&
放入脚本中不同,后者可能无法满足您的要求。
次佳回答
每个人都忘记了disown
。因此,这里是一个摘要:
-
&
将作业放在后台。-
使其在尝试读取输入时阻塞,并且
-
使 shell 不等待其完成。
-
-
disown
从Shell的作业控件中删除了该进程,但仍将其连接到终端。-
结果之一是 shell 程序将不会向其发送
SIGHUP
(如果 shell 程序接收到SIGHUP
,它还将向该进程发送SIGHUP
,这通常会导致该进程终止)。 -
显然,它只能应用于后台作业(因为在前台作业运行时无法输入)。
-
-
nohup
断开该进程与终端的连接,将其输出重定向到nohup.out
并将其与SIGHUP
屏蔽。-
该过程不会收到任何发送的
SIGHUP
。 -
它完全独立于作业控制,并且原则上也可以用于前台作业(尽管这不是很有用)。
-
通常与
&
一起使用(作为后台作业)。
-
第三种回答
nohup cmd
关闭终端时不会挂断。默认情况下输出到nohup.out
您可以将此与背景结合使用,
nohup cmd &
并摆脱输出,
nohup cmd > /dev/null 2>&1 &
您也可以使用disown
命令。类型cmd
,Ctrl-Z
,bg
,disown
第四种回答
或者,在程序运行后,您可以点击Ctrl-Z,这将停止您的程序,然后键入
bg
这会将您最后停止的程序置于后台。 (如果您在没有’&’的情况下启动了某些内容,但仍希望在背景中使用它而不重新启动它,则很有用)