【问题标题】:Using command & + disown instead of nohup使用命令 & + disown 代替 nohup
【发布时间】:2017-11-27 18:45:21
【问题描述】:

我今天尝试使用nohup 命令执行rsync 命令,以便即使我关闭控制台,也可以将某些文件从虚拟机复制到另一个虚拟机。

那我说为什么不用rsync [parameters] <b>&amp;</b> + disown %1

两者有什么区别?

【问题讨论】:

    标签: linux bash shell rsync nohup


    【解决方案1】:

    disown 是更好的做法(内置在 shell 中,而不是依赖于外部工具),但它需要更多的工作:您需要自己重定向 stdin、stdout 和 stderr(而nohup 会做使用硬编码的nohup.out 名称重定向(如果您自己没有这样做)。

    因此:

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

    作为文体说明,如果您对 PID 的唯一用途是将其传递给 disown,我确实建议将 disown 与调用放在同一行, 如上所述:这确保了 $! 引用指向之前立即派生的后台进程,即使未来的更改添加更多代码,可能会在 rsync 启动后派生其他后台进程。 (另一方面,如果您想稍后引用 PID,您可以将变量赋值放在同一行:rsync ... &amp; rsync_pid=$!,然后将disown -h "$rsync_pid" 放在单独的行上。

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 2013-03-14
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多