【问题标题】:need to check wheter multiple pid are finished execution需要检查多个pid是否执行完毕
【发布时间】:2018-10-31 04:12:47
【问题描述】:
pid_list="21232 21231 43432" # same can be put in an array as well

我在后台运行了一堆命令,并使用 $i 获取了它的 pid。我如何检查它是否完成。

【问题讨论】:

  • 请注意,如果您想等到这些 pid 中的一个或全部完成,那么检查它们是否已完成不是正确的方法。
  • 如果它们是您启动的唯一进程,您可以简单地使用wait 等待它们。
  • 我在一个while循环中检查这个条件,如果所有的pid都完成了,它将退出,否则我正在使用sleep 1m等待一分钟......这将一直持续到上传完成

标签: bash shell unix pid


【解决方案1】:

试试这个:

ps -ef | egrep $(echo $pid_list | sed 's/ /|/g') | grep -v grep | wc -l

如果输出为0,则表示过程结束。

【讨论】:

    【解决方案2】:

    有一种方法可以查询 ps 以获取有关特定 PID 或 PID 列表的信息。

    这应该可以解决您的问题。如果此命令返回非零值,则列表中至少有一个 PID 仍处于活动状态/未完成。

    ps -p $(echo ${pid_list} | sed 's/\ /,/g') | tail -n +2 | wc -l
    

    解释:

    • ps -p 接受以逗号分隔的 PID 列表以获取信息。
    • sed 's/\ /,/g' 用逗号替换空格分隔符
    • tail -n +2 删除输出中的第一行,这只是标题
    • wc -l 计算返回的行数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多