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


16

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

Answers:


20

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


13

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

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

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

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


我发现tmux比屏幕更易于配置和使用。此外,BSD也获得了许可。
克里斯塔普斯(Kristaps)

1
您还可以使用byobu它在屏幕上添加一些不错的功能。在大多数apt仓库和Red Hat的EPEL仓库中都可以使用它。
詹姆斯

0

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

&:带此符号,当前端子无输出,进程运行后台


4
仍然有输出,因为&不会删除标准输出和错误流。您必须使用流重定向,像这样(在bash中)命令> / dev / null 2> 1
Kristaps
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.