【问题标题】:writing PID of a command in a variable在变量中写入命令的 PID
【发布时间】:2012-08-06 08:28:30
【问题描述】:

我在 bash 脚本中启动了这个命令:

rsync -av $sourcedir/ $destdir/

如何将特定命令的 PID 存储在同一脚本的变量中?

我试过了:

rsync -av --stats $sourcedir/ $destdir/ && pid=$(echo $$)

但在日志文件中为该操作报告的 pid 与打印出来的回显 $pid 不同

感谢您的帮助!

【问题讨论】:

  • 为什么要知道这个命令的PID?如果您同步运行它,则该进程将在您尝试获取其 PID 时完成,因此该 PID 将不再存在,或者将引用不同的进程。
  • $$ 是当前 shell 的进程 ID,而不是最近运行的命令。此外,pid=$$ 就足够了。

标签: linux bash pid


【解决方案1】:
rsync -av --stats $sourcedir/ $destdir/ & pid=$!

注意& 的用法。您可以并行运行命令。

如果你做rsync && pid=$!,那就错了,因为命令(rsync)在你做赋值的地方(pid=$!)已经完成了,所以保存它的pid是没有意义的一个变量,原因很明显。

【讨论】:

    【解决方案2】:

    PID 存储在$! 中,您可能希望在程序运行时获取 PID,而不是在程序完成后获取。

    rsync -av --stats $sourcedir/ $destdir/ & pid=$!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-05
      • 2021-11-22
      • 1970-01-01
      • 2012-07-22
      • 2015-01-01
      • 2014-02-26
      • 2020-12-01
      • 1970-01-01
      相关资源
      最近更新 更多