我一直在使用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
这两个示例都无法正常工作,或者在流程结束后继续循环。我做错了什么?
答案 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