想要更改pid的进程组

时间:2015-07-07 11:35:23

标签: shell unix scripting

想要杀死树的进程。
例如,在A->B->C->D->E链中,我想要删除流程C,D,E,而不是AB

所以我使用setpgid(PID_C,0)来杀死CC的所有孩子。 它适用于C ++。

但我想用脚本做同样的事情。
任何人都可以帮助我

1 个答案:

答案 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