我有一个关于 Linux 系统中信号的简单问题。据我了解,每个过程都有它的PID
和PGID
。当我创建一个进程时,它会变得独一无二PID
,现在如果我要创建一个具有fork()
功能的新进程,我会得到具有不同PID
但相同的子进程PGID
。
现在,代码
#include<stdio.h>
#include<unistd.h>
int main()
{
int i=3;
int j;
for(j=0;j<i;++j)
{
if (fork() == 0)
{
while(1)
{
}
}
}
printf("created\n");
while(1)
{
}
return 0;
}
当我编译这个程序并使用命令运行它时
./foo
等一下,他创建了他的孩子,我做CTRL-C
,然后ps aux
我可以看到父母和孩子都走了,但如果我这样做
./foo
等待分叉完成并在其他终端执行
kill -INT <pid_of_foo>
ps aux
我可以看到父母已经走了,但孩子们还活着,正在吃我的 CPU 。
我不确定,但似乎CTRL-C
将信号发送到某个进程组中的每个进程,并且KILL -SIGNAL pid
命令将信号发送到带有PID=pid
not的进程PGID=pid
。
我在正确的轨道上吗?如果是,为什么组合键会杀死进程PGID
而不是PID
?