使用命令 & + disown 替代 nohup

6
我今天尝试使用nohup命令来执行一个rsync命令,以便在关闭控制台后从VM复制一些文件到另一个位置。然后我想为什么不使用rsync [parameters] &+disown %1呢?这两种方式有什么区别?
1个回答

8

disown 是更好的做法(因为它是 shell 内置命令,而不是依赖于外部工具),但需要更多的工作:您需要自己重定向标准输入、标准输出和标准错误输出(而 nohup 会在缺少重定向的情况下使用硬编码的 nohup.out 文件名进行重定向)。

因此:

rsync "${args[@]}" </dev/null >logfile 2>&1 & disown -h "$!"

作为一种风格上的注意,如果您唯一使用PID是将其传递给disown,我建议将disown放在与调用相同的行上,如上所示:这样可以确保$!引用是在rsync启动之后立即分叉的后台进程,即使未来的更改添加了更多代码,在rsync启动之后可能会分叉其他后台进程。(另一方面,如果您想稍后引用PID,则可以在同一行上放置变量赋值:rsync ... & rsync_pid=$!,然后在单独的行上放置disown -h "$rsync_pid")。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接