SIG_IGN не может игнорировать сигнал SIGINT

0

У меня есть основной процесс, и из него возникает некий дочерний процесс. В какой-то момент я должен передать сигнал 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
    Я нигде не вижу SIG_IGN в вашем коде. Покажите тестовый пример .
  • 0
    Извините .. я редактировал сейчас
Показать ещё 1 комментарий
Теги:
signals

1 ответ

0
nPgid = getpgid(parentPID);

Что такое parentPID? Получить группу вызывающего процесса либо передать 0 либо результат getpid().

От man getpgid():

getpgid() возвращает PGID процесса, указанного pid. Если pid равно нулю, используется идентификатор процесса вызывающего процесса. (Извлечение PGID процесса, отличного от вызывающего, редко необходимо, и POSIX.1 getpgrp() является предпочтительным для этой задачи.)

Из этого выше текста я сделаю вывод, чтобы сделать

nPgid = getpgid(o);
  • 0
    В любом случае я смог получить идентификатор группы для этого процесса. дает сигнал Sigint всей группе происходит. но даже если я даю SIG_IGN в родительском процессе, он также получает сигнал sigint и завершается. Я не хочу, чтобы родительский процесс завершился.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню