Shell 要更改pid的进程组吗
想要杀死一棵树的进程Shell 要更改pid的进程组吗,shell,unix,scripting,Shell,Unix,Scripting,想要杀死一棵树的进程例如,在A->B->C->D->E链中,我想杀死进程C、D、E,但不想杀死A和B 因此,我使用setpgid(PID_C,0)杀死C和C的所有子级。 它对C++工作很好。 但我想用脚本做同样的事情 有人能在这方面帮助我吗?我真的不明白你如何确定setpgid终止了你的进程链,通常setpgid函数将加入一个现有进程组或创建一个新的进程组。(它不是C++) 无论如何,下面的替代脚本应该可以工作 传递链父进程的进程id,即在您的情况下是进程的pidB 它递归地在给定pid的子进程
例如,在
A->B->C->D->E
链中,我想杀死进程C、D、E
,但不想杀死A
和B
因此,我使用setpgid(PID_C,0)
杀死C
和C
的所有子级。
它对C++工作很好。
但我想用脚本做同样的事情有人能在这方面帮助我吗?我真的不明白你如何确定
setpgid
终止了你的进程链,通常setpgid
函数将加入一个现有进程组或创建一个新的进程组。(它不是C++
)
无论如何,下面的替代脚本应该可以工作
传递链父进程的进程id,即在您的情况下是进程的pidB
它递归地在给定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
kill-9 pid对我不起作用。。假设我给出了“kill-9pid_C”,那么它应该杀死C和C下的所有进程,在我的例子中,它只杀死C而不是它的子进程。因此,我使用setpgid()标记组中C(包括C)下的所有进程,然后终止该组。我提供的shell脚本仅在最上面的进程上调用
kill-9
。首先,它递归地杀死下面大多数子进程,然后处理一个级别,直到到达进程C
并杀死它。