SIG_IGN无法忽略SIGINT信号

时间:2014-06-30 11:45:37

标签: c++ c linux signals

我有一个主进程和一些子进程从中生成。在某个时间点,我必须向所有子进程发出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);

我没有收到任何错误。但是父母被杀了。我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

nPgid = getpgid(parentPID);

什么是parentPID?获取调用过程的组要么通过0,要么通过getpid()

的结果

来自man getpgid()

  

getpgid()返回pid指定的进程的PGID。如果pid          为零,使用调用进程的进程ID。 (检索          很少需要除调用者之外的进程的PGID,并且          POSIX.1 getpgrp()是该任务的首选。)

从上面这段文字中我得出结论

nPgid = getpgid(o);