我正在尝试编写
一个强大的bash脚本,并在其中创建
一个后台进程.在脚本结束时,我想要杀死它.
我有它的PID.
我在想这样的事情
while [[ ps ef $PID ]] ; do
kill $PID
sleep 0.5
done
有什么建议更好吗?这种方法有任何可能的问题吗?
重复杀死进程的问题在于您在创建新进程时遇到了竞争条件.这并不是特别可能,但是当你正在睡觉时,过程可能会
退出并且新进程会以相同的PID启动.
你为什么不得不反复杀死这个过程?如果是因为进程将退出,但在收到信号后退出可能需要一些时间,您可以使用wait:
kill $PID
wait $PID
在一个理想的系统中,你永远不必重复杀死或发出kill -9 $PID.如果你必须这样做,你可能会考虑修复你正在运行的任何东西,所以你不必这样做.在此期间,你可能不会遇到竞争条件,你可以通过(比方说)在杀死进程之前检查/ proc / $PID /的时间戳来防范它.不过,这是糟糕的黑客行为.