什么时候应该使用“nohup”,什么时候应该使用“&”?

Ale*_*lex 17 linux unix

我永远不知道什么时候是使用 nohup 和命令末尾的 & 的最佳时间。

Kri*_*aps 22

Nohup 使程序忽略 HUP 信号,允许它在当前终端关闭/用户注销后运行。Nohup 不会将程序发送到后台。
命令末尾的 & 与 shell 作业控制有关,允许用户在当前 shell 会话中继续工作。
通常 nohup 和 & 结合起来启动程序,该程序在用户注销后运行,并允许在当前 shell 会话中继续工作。


Cak*_*mox 13

通常,&当我想在后台运行一个不需要很长时间运行的命令时,我会使用一个命令,或者如果我意外退出会话,我不会真正关心程序是否终止。

xcalc &
rdesktop 1.2.3.4 & 
./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py &
Run Code Online (Sandbox Code Playgroud)

当通过 VPN 或狡猾的远程连接工作时,我倾向于nohup用于运行任何需要一段时间才能运行的东西。例如,在远程主机上运行大型数据导入时,您可能希望使用它nohup来确保断开连接不会让您在重新连接时重新开始。

nohup ./do_data_load.py mydatafile.txt &
Run Code Online (Sandbox Code Playgroud)

当开发人员没有正确地守护服务时,它也会被使用,因此您必须使用nohup它来确保在您注销时它不会被终止。

nohup sillyd &
Run Code Online (Sandbox Code Playgroud)

如果您nohup在运行类似于最后两个示例的程序时碰巧忘记使用,您可以使用内置的 bash 或 zshdisown来达到相同的效果。

$ sillyd &
[1] 12345            # Whoops!
$ disown %1
Run Code Online (Sandbox Code Playgroud)

很少使用nohup没有&,因为如果您已注销,则无法真正重新附加到 nohup 会话。这几乎消除了它对交互式命令的用处。如果您有一个交互式命令想要在会话中保持或避免复杂的断开连接,您可以使用screen. 全副武装和可操作的screen会话的火力超出了本文的范围,因此您应该更详细地查看