-
nohup
-
解释
不挂断地运行命令。no hangup的缩写,意即“不挂断”。
nohup运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号;
-
语法
nohup Command [ Arg ... ] [ & ]
例如:
nohup tail -f nohup.out
-
-
&
-
解释
是指在后台运行
-
语法
Command [ Arg ... ] [ & ]
例如:
sh test.sh &
-
-
nohup 和 & 的区别:
-
免信号的区别
- nohup的意思是忽略SIGHUP信号, 所以当运行nohup ./a.out的时候, 关闭shell(关闭会话session), 那么start.sh进程还是存在的(对SIGHUP信号免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那么start.sh进程也是会消失的(因为对SIGINT信号不免疫)
- &的意思是在后台运行, 什么意思呢? 意思是说, 当你在执行 ./a.out & 的时候, 即使你用ctrl C, 那么start.sh照样运行(因为对SIGINT信号免疫)。 但是要注意, 如果你直接关掉shell后, 那么,start.sh进程同样消失。 可见, &的后台并不硬(因为对SIGHUP信号不免疫)。
-
输入与输出
-
nohup sh test.sh
将sh test.sh任务放到后台,关闭标准输入,前台不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。即使关闭xshell退出当前session依然继续运行。
-
sh test.sh &
将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失
-
nohup sh test.sh &
将sh test.sh任务放到后台,但是依然可以使用标准输入,前台能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。即使关闭xshell退出当前session依然继续运行。
总结
使用&后台运行程序:- 结果会输出到终端
- 使用Ctrl + C发送SIGINT信号,程序免疫
- 关闭session发送SIGHUP信号,程序关闭
使用nohup运行程序:
- 结果默认会输出到nohup.out
- 使用Ctrl + C发送SIGINT信号,程序关闭
- 关闭session发送SIGHUP信号,程序免疫
平日线上经常使用nohup和&配合来启动程序:
- 同时免疫SIGINT和SIGHUP信号
-
-