1. &
关键字
&
的意思是在后台运行, 当你在执行 ./start.sh &
的时候,即使你用ctrl C, 那么start.sh照样运行(因为对SIGINT信号免疫 )。 但是要注意, 如果你直接关掉shell后, 那么,start.sh进程同样消失。 可见, &的后台并不硬(因为对SIGHUP信号不免疫)。
2. nohup
关键字
nohup
的意思是忽略SIGHUP信号, 所以当运行 nohup ./start.sh
的时候, 关闭shell, 那么start.sh进程还是存在的(对SIGHUP信号免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那么start.sh进程也是会消失的(因为对SIGINT信号不免疫)
因此, &
和nohup
没有任何关系, 要让进程真正不受shell中Ctrl C和shell关闭的影响, 那就用同时使用nohup ./start.sh &
3. 结论:
使用&后台运行程序:
结果会输出到终端
使用Ctrl + C发送SIGINT信号,程序免疫
关闭session发送SIGHUP信号,程序关闭
使用nohup运行程序:
结果默认会输出到nohup.out
使用Ctrl + C发送SIGINT信号,程序关闭
关闭session发送SIGHUP信号,程序免疫
补充
平时最好使用nohup和&配合来启动程序:
同时免疫SIGINT和SIGHUP信号
同时,还有一个最佳实践:
不将信息输出到终端标准输出,而是用日志组件将信息记录到日志文件里:nohup.out