在后台运行Bash脚本并退出终端


Answers:


45

为了避免退出信号传播到终端和外壳程序的子进程,请使用来运行命令nohup,即:

nohup cmd &

1
这是正确的答案。如果没有nohup,则启动的进程仍被视为终端进程的“子级”,因此如果终端关闭则终止。
Izzy 2012年

3
cmd & disown因为&就像;命令分隔符一样被处理,所以它也可以工作。disown命令删除bash shell会话和后台命令之间的连接。
lornix 2012年

2
zsh为此有一个简写:cmd &|
2012年

为此,我必须在Terminal.app中更改首选项。在“配置文件”下,选择您的活动配置文件,然后选择“外壳”>“当外壳退出时”>“如果外壳干净退出则关闭”
antoine

6

使用screen

screen -S <session name> -d -m <your command>

之后,您可以退出终端,也可以通过以下方式重新连接到终端:

screen -r <session name>

更多信息:参考


4

如果您想在退出终端后每隔一秒钟左右在后台运行一个特定的命令或文件,则可以尝试以下简单的小操作;

nohup watch -n5 'bash script.sh' &

那将每5秒运行scipt.sh。


1
接受的答案已经涵盖了“ nohup”。而且我非常确定问问者提到了cron,因为他们使用它来表示“将来几秒钟运行此命令”,而不是定期运行它。
David Richerby,2015年

1
我的回答不会使事情变得更糟。确实看到了否决点。神经就足够了。
jamietelin

3

在命令后加上“&”字符。

例如:

/home/your/script.sh &

7
在这种情况下,当终端关闭时,该过程也将由/home/your/script.sh-而不是与其“父”分离,而只是“后台”启动。使用nohup脱离这是真的。
Izzy 2012年

我的坏,我当时并不知道,但是当我在Debian上进行测试时,该命令在关闭启动它的shell之后仍然执行:/
Flinth 2012年

1
我不确定后台进程连接的确切位置和时间。但是,例如,如果您登录到远程计算机,则肯定会在您注销后立即停止(除非它是守护进程本身)。因此,要100%确定,您宁愿使用nohup-还将所有(现在不可见)的输出记录到nohup.out位于您从中启动命令的目录中的一个文件中。
Izzy 2012年

好的,谢谢您的解释^^
Flinth

jobs命令结合使用时,此答案可能会正常工作。通常,我希望能够在将背景设为后台后返回到Shell进程。
djangofan,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.