nohup与简单输出重定向之间的区别

时间:2014-08-03 01:48:44

标签: bash redirect nohup

以下启动后台作业的方法有什么区别?

  • ./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窗口。在操作上,两种方法都达到了相同的结果(即使在终端关闭后也可以运行)。我的问题是这两种方法之间的区别。

1 个答案:

答案 0 :(得分:0)

列出的方法的不同取决于shell中huponexit变量的状态。此变量的状态由shopt | grep huponexit获得。

huponexitoff时,列出的方法在操作上是相同的 - 两者都将标准输出重定向到logfile并在退出shell时继续运行。

huponexiton,(shopt -s huponexit)时,shell会将挂起(hup)信号发送给子进程,导致它终止。 nohup方法继续有效。

由于您可能无法始终拥有控制huponexit的权限,因此nohup方法对于长期后台作业更加安全。