我有一个脚本可以加载一些程序,但在给定kill -15
时拒绝退出,如果我使用kill -9
,则所有子进程都会继续运行。
我试过了:
parent=$(pgrep -f ./start_server.sh)
children=$(pgrep -P $parent)
sudo kill -9 $children $parent &
这会杀死大部分的pids(2964 2976 2977 2978 2979)。问题在于,有时候其中一个孩子会有自己的孩子,而且还会继续运行(2976有10个等)。
当我说他们继续投放时我的意思是:kill -9 2964
会导致2976 2977 2978 2979
成为2738
的孩子
此外,上面的代码会在kill
命令返回(并将Killed
打印到控制台)后立即退出脚本。我尝试通过添加&
或exec
来运行它,但脚本仍会立即退出。
在一天结束时,我通过initd启动了这个./start_server.sh
,当它崩溃时,由于这些孤立的进程,它无法正常重启。我想在开始时加上一条线来谋杀它产生的所有过程。