想要杀死树的进程。
例如,在A->B->C->D->E
链中,我想要删除流程C,D,E
,而不是A
和B
。
所以我使用setpgid(PID_C,0)
来杀死C
和C
的所有孩子。
它适用于C ++。
但我想用脚本做同样的事情。
任何人都可以帮助我
答案 0 :(得分:0)
我真的不知道你如何确保setpgid
杀死你的流程链,通常setpgid
函数将加入现有的流程组或创建一个新的流程组。 (而不是C++
)
无论如何,应该使用替代脚本
传递您的链的父进程的进程ID,即在您的情况下,它是进程B
的pid
它以递归方式循环遍历给定pid
的子进程,并通过9 (SIGKILL)
信号从最低顺序发出信号通知每个子进程被终止。
#!/bin/sh
function getcpid() {
cpids=`pgrep -P $1|xargs`
#echo "cpids=$cpids"
for cpid in $cpids;
do
#echo "$cpid"
getcpid $cpid
kill -9 cpid
done
}
getcpid $1