我有一个主进程和一些子进程从中生成。在某个时间点,我必须向所有子进程发出SIGINT信号,但不向主进程发出信号。我无法存储所有子进程的pid。所以我在主进程中使用SIG_IGN忽略SIGINT,并在我的操作后设置为默认值。但它没有用。
请在下面找到我的代码段:
/* Find group id for process */
nPgid = getpgid(parentPID);
/* Ignore SIGINT signal in parent process */
if (signal(SIGINT, SIG_IGN) == SIG_ERR)
{
cout << "Error in ignoring signal \n");
}
/* Send SIGINT signal to all process in the group */
nReturnValue = kill ( (-1 * nPgid), SIGINT);
if (nReturnValue == RETURN_SUCCESS)
{
cout << "Sent SIGINT signal to all process in group successfully \n";
}
else
{
cout << "Alert!!! Unable to send SIGINT signal to all process in the group \n";
}
/* Set SIGINT signal status to default */
signal (SIGINT, SIG_DFL);
sleep(2);
我没有收到任何错误。但是父母被杀了。我在这里做错了吗?
答案 0 :(得分:0)
nPgid = getpgid(parentPID);
什么是parentPID
?获取调用过程的组要么通过0
,要么通过getpid()
。
来自man getpgid()
:
getpgid()返回pid指定的进程的PGID。如果pid 为零,使用调用进程的进程ID。 (检索 很少需要除调用者之外的进程的PGID,并且 POSIX.1 getpgrp()是该任务的首选。)
从上面这段文字中我得出结论
nPgid = getpgid(o);