使用命令&+ disown而不是nohup

Yas*_*oui 3 linux bash shell rsync nohup

我今天尝试使用该nohup命令执行rsync命令,以便将一些文件的副本从VM处理到另一个,即使我关闭控制台也是如此.

然后我说为什么不用+rsync [parameters] &disown %1

这两者有什么区别?

Cha*_*ffy 5

disown是更好的做法(内置在shell而不是依赖于外部工具),但它需要更多的工作:你需要自己重定向stdin,stdout和stderr(而如果你没有' nohup,将使用nohup.out硬编码的名称进行重定向'自己动手).

从而:

rsync "${args[@]}" </dev/null >logfile 2>&1 & disown -h "$!"
Run Code Online (Sandbox Code Playgroud)

作为一个文体的注意,如果你做出PID的唯一用途是将它传递给disown,我建议把disown在同一行调用,如上面做了:这可确保$!引用的是后台进程分叉之前立即,即使将来的更改在rsync启动后添加更多代码,可能会分支其他后台进程.(另一方面,如果您想稍后引用PID,可以在同一行上放置一个变量赋值:rsync ... & rsync_pid=$!,然后disown -h "$rsync_pid"在另一行上).