以下启动后台作业的方法有什么区别?
./long_job.sh > logfile &
nohup ./long_job.sh > logfile &
(默认情况下,选项2会打印到nohup.out
,或者您可以重定向到您选择的文件名。)
nohup
有什么好处?我测试了以下shell脚本作为long_job.sh
的代理并退出终端(使用ctrl-D
)
while [ 1==1 ]; do
jot -r -c 4 A Z | rs -g 0 4
echo $$ # Echo pid
sleep 2
done
有一个nohup question具有相似的标题,但是它询问了stdout和stderr重定向之间的区别
编辑:This question没有谈论显式文件重定向。如果没有重定向,当shell退出时,子进程会因为没有要打印的stdout而死掉。但是 with 重定向它不需要打开shell窗口。在操作上,两种方法都达到了相同的结果(即使在终端关闭后也可以运行)。我的问题是这两种方法之间的区别。
答案 0 :(得分:0)
列出的方法的不同取决于shell中huponexit
变量的状态。此变量的状态由shopt | grep huponexit
获得。
当huponexit
为off
时,列出的方法在操作上是相同的 - 两者都将标准输出重定向到logfile
并在退出shell时继续运行。
当huponexit
为on
,(shopt -s huponexit
)时,shell会将挂起(hup)信号发送给子进程,导致它终止。 nohup
方法继续有效。
由于您可能无法始终拥有控制huponexit
的权限,因此nohup
方法对于长期后台作业更加安全。