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

我永远不知道什么时候是使用nohup的最佳时机,而在命令的末尾是&。

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

通常&当我想要在后台运行一个不会花费很长时间运行的命令时,或者当我意外退出会话时,如果程序终止,我不会在意。

 xcalc & rdesktop 1.2.3.4 & ./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py & 

当通过VPN或远程连接进行工作时,我倾向于使用nohup来运行需要一段时间才能运行的任何事情。 例如,在远程主机上运行大量数据导入时,可能需要使用nohup来确保断开连接后不会在重新连接时重新开始。

 nohup ./do_data_load.py mydatafile.txt & 

当开发人员没有正确的守护一个服务的时候,它也被使用了,所以你必须使用nohup来确保在注销时不会被终止。

 nohup sillyd & 

如果在运行类似于最后两个例子时忘记使用nohup ,则可以使用bash或zsh内build的disown来达到相同的效果。

 $ sillyd & [1] 12345 # Whoops! $ disown %1 

如果没有& ,使用nohup是非常罕见的,因为如果您注销,您无法真正重新连接到nohup会话。 这几乎消除了交互式命令的有用性。 如果您有一个交互式命令要保留会话或避免复杂的断开,您可以使用screen 。 完全武装和操作screen会议的火力超出了这篇文章的范围,所以你应该更详细地检查 。

nohup:注销当前用户,进程不会停止

&:用这个符号,当前terminal将没有输出,进程运行后台