如何监视shell脚本中每个命令的pid?

如何监视shell脚本中每个命令的pid?

在我的环境中,我有一个 shell 脚本在后台运行 rsync 和 tar。rsync 用于传输文件,tar 在 rsync 完成后进行压缩。我的问题是如何监视 rsync 的 pid,并在 rsync 的 pid 不再存在时告诉 tar 命令启动。

shell 脚本可能看起来像这样:

rsync data.log B/ &
tar data.tar.gz B/data.log &

答案1

这很简单:您需要使用以下命令存储 pid 变量:

PID_1=$!

要检查进度是否仍在运行,只需继续使用 kill -0 即可:

while True:
     if [ 'kill -0 $PID_1' -eq 0 ]; then
         echo Process still running
     else
         echo process done

(如果代码运行不正常 - 我很抱歉。我一直在床上写作:-))

解释一下:“kill -0 $PID_1”返回 0 或显然是 1。如果返回 0,则表示进程正在运行;如果返回 1,则表示进程已完成。您可以使用“echo $?”检查返回代码。

我希望这有帮助。

相关内容