我想编写一个在后台运行两个命令的bash脚本。我正在使用nohup:
nohup cmd1 &
nohup cmd2 &
但是,只有第一个命令在后台运行。
当我在命令行中手动运行nohup cmd1 &
时。首先,我输入nohup cmd1 &
然后按Enter键;这开始了这个过程:
但是,我需要再次输入 才能输入另一个命令:
我认为这会“堵塞”命令行,导致我的bash脚本陷入第一个nohup ... &
命令。
有没有办法阻止这种情况?
答案 0 :(得分:2)
没有什么是“堵塞”的。在后台运行的第一个命令在 shell打印下一个提示后打印一些输出。即使光标不再与提示符在同一行,shell也在等待您键入命令。额外的 Enter 是一个空命令,导致shell打印另一个提示符。这是无害的,但没必要。
答案 1 :(得分:0)
让我向nohup
说些什么,因为我不确定你是否确定它在做什么。简而言之,在后台运行进程不需要nohup
命令。该行末尾的&符是这样做的。
nohup
会阻止后台进程接收SIGHUP
(挂断的hup)。 SIGHUP
将有效终止该过程。
如果以nohup
启动,则进程将不会收到该事件并将继续运行,如果终端将被关闭,则由init进程(pid 1)拥有。
此外,nohup
命令会将受控进程的标准输出重定向到文件,这意味着它不再出现在屏幕上。默认情况下,此文件名为nohup.out
。