nohup 和 “>& nohup.out &” 有什么区别?

nohup 和 “>& nohup.out &” 有什么区别?

nohup 使进程免受 shell 的 SIGHUP 的影响,但即使我从我的 shell 运行它:

bash -c 'while true; do sleep 1; date; done' >& nohup.out &

然后注销并重新登录,bash 仍在运行并将输出发送到 nohup.out。有什么区别吗?仅依靠重定向是否在任何方面都不太可靠?

答案1

在 bash 中,后台作业不需要受保护禁止

根据你的 bash 版本,行为可以改变。在信号手册页部分

如果已使用 shopt 设置了 huponexit shell 选项,则当交互式登录 shell 退出时,bash 会向所有作业发送 SIGHUP。

舒巴坦选项默认为离开

答案2

nohup允许您断开与 shell 的执行

通常使用 nohuping 后台作业来避免在从远程 SSH 会话注销时终止它们。在这种情况下经常出现的另一个问题是 ssh 拒绝注销(“挂起”),因为它拒绝丢失来自/到后台作业的任何数据。

通过重定向所有三个 I/O 流也可以解决此问题:
nohup ./myprogram > foo.out 2> foo.err < /dev/null &

另一个参考SSH '挂断' 案例

相关内容