为什么我不能用这个c代码杀死进程组?

时间:2018-02-01 11:15:51

标签: c linux multiprocessing kill

在主要的父进程中,我打电话给:

killpg(child_group, SIGKILL);

在子进程中,我将子组设置为:

setsid();
child_group = getpgrp();

但是我检查了进程,ps显示进程组没有被杀死。 我做错了什么?

1 个答案:

答案 0 :(得分:2)

在父流程中:

killpg(child_group, SIGKILL);

你是如何得到child_group的?

为此目的在子进程中执行以下操作毫无意义:

child_group = getpgrp();

这是因为这个child_group只是子进程中的一个副本(即:父进程中的child_group没有得到修改)

必须将

SIGKILL发送到与孩子的 PID 对应的 PGID ,因为它通过{{1}成为流程组负责人}。也就是说,作为setsid()的参数,您应该通过调用killpg()使用返回到父进程的pid_t

确保{<1}}在 fork()(孩子成为进程组之后)成功返回之后被父调用killpg()领导者而不是之前。)

一个最小的例子:

setsid()