Bash:使用while或until等待PID不存在

时间:2012-07-11 05:07:57

标签: bash

我一直在使用Bash等待PID不再存在。我试过了

#!/bin/bash
while [ kill -0 PID > /dev/null 2>&1 ]; do
    //code to kill process
done
//code to execute after process is dead

以及

#!/bin/bash
until [ ! kill -0 PID > /dev/null 2>&1 ]; do
    //code to kill process
done
//code to execute after process is dead

这两个示例都无法正常工作,或者在流程结束后继续循环。我做错了什么?

2 个答案:

答案 0 :(得分:16)

你应该只是这样做:

while kill -0 $PID >/dev/null 2>&1
do
    # Code to kill process
done

循环条件测试最后一个命令的退出状态 - 在本例中为kill

'last'的意义在于你可以写:

while sleep 1
      echo Testing again
      kill -0 $PID >/dev/null 2>&1
do
    # Code to kill process
done

这也会测试kill的退出状态(仅{和kill)。

答案 1 :(得分:4)

你也可以使用procfs进行unix(几乎所有除了mac os之外)

while test -d /proc/$PID; do
     kill -$SIGNAL $PID
     # optionally
     sleep 0.2
done