Ama*_*rus 9 scripting bash kill process snippet
我正在尝试编写一个强大的 bash 脚本,并在其中创建一个后台进程。在脚本的最后,我想杀死它。我有它的PID。
我在想这样的事情
while [[ ps ef $PID ]] ; do
kill $PID
sleep 0.5
done
Run Code Online (Sandbox Code Playgroud)
有什么更好的建议吗?这种方法有什么可能的问题吗?
And*_*ett 11
反复终止进程的问题在于,您在创建新进程时遇到了竞争条件。这不是特别有可能,但是当您睡觉时,该进程可能会退出并且一个新进程以相同的 PID 启动。
为什么你必须反复终止进程?如果是因为进程会退出,但收到信号后可能需要一段时间退出,可以使用wait:
kill $PID
wait $PID
Run Code Online (Sandbox Code Playgroud)
在理想的系统中,您永远不必重复 akill或 issue kill -9 $PID。如果您必须这样做,您可能需要考虑修复您正在运行的任何内容,这样您就不必这样做了。同时,您可能不会遇到竞争条件,您可以通过(例如)在终止进程之前检查 /proc/$PID/ 的时间戳来防止它。不过,这是糟糕的黑客行为。
对于推荐从kill $PID到步骤的每个人kill -9 $PID,我必须提醒您无用的使用 kill -9。
不不不。不要使用kill -9。
它没有给进程一个干净的机会:
关闭套接字连接
清理临时文件
通知它的孩子它正在消失
重置其终端特性
等等等等等等。
通常,发送 15,然后等待一两秒钟,如果这不起作用,则发送 2,如果不起作用,则发送 1。如果没有,请删除二进制文件,因为该程序表现不佳!
不要使用kill -9。不要为了整理花盆而拿出联合收割机。
现在,我不同意“删除二进制部分”,但进展似乎比kill -9.
我也同意在创建具有这里提到的相同 PID 的新进程时关心竞争条件。
| 归档时间: |
|
| 查看次数: |
8308 次 |
| 最近记录: |