我永远不知道什么时候是使用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将没有输出,进程运行后台