搜索大法,网上没找到合适的解决方案,集众家之长,形成最终方案,非常见谅,历史久远,参考文档未记录。
pstree $(cat /run/xxx.pid) -p | awk -F'[()]' '{for(i=0;i<=NF;i++)if($i~/(^[0-9])+/)print $i}' | xargs kill -9
关键思路是通过pstree -p参数获取指定进程id的所有子进程(包括自己),在用kill暴力结束。注意子进程还会有子子进程,网上处理方法主要是边界处理有问题,需要涵盖没子进程、有一个子进程、有多个子进程以及有子子进程的情况。
cat $(cat /run/xxx.pid) 是读取 xxx.ip 文件,里面记录了对应进程的id,这里可直接替换为自己的进程id。