在主要的父进程中,我打电话给:
killpg(child_group, SIGKILL);
在子进程中,我将子组设置为:
setsid();
child_group = getpgrp();
但是我检查了进程,ps显示进程组没有被杀死。 我做错了什么?
答案 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()