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

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

我从来不知道什么时候是使用 nohup 和命令末尾的 & 的最佳时机。

答案1

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

答案2

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

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 或 zshdisown来达到相同的效果。

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

nohup不使用 的情况下很少使用&,因为如果您已注销,则无法真正重新连接到 nohup 会话。这几乎消除了它对交互式命令的用处。如果您有一个交互式命令,并且希望在会话中持续存在或避免复杂的断开连接,则可以使用screen。全副武装且可操作的会话的火力screen超出了本文的范围,因此您应该详细了解

答案3

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

&:使用该符号,当前终端将无输出,进程在后台运行

相关内容