после чтения (signalfd), нужен ли вызов waitid ()? - PullRequest
1 голос
/ 28 мая 2019

Требует ли вызов read () для signalfd использования SIGCHLD? Или мне нужно использовать вызов waitid () после?

Я получил читаемое событие в signalfd с помощью вызова epoll_wait (), затем я выполняю read () для signalfd, который выдает всю информацию, необходимую в signalfd_siginfo. Я зацикливаюсь на read () до возврата -1 и errno = EAGAIN. Но с помощью команды оболочки ps aux процессы все еще здесь с <defunct>.

Если я зациклюсь на waitid (), у меня нет проблем. Зачем мне нужно вызывать waitid () после чтения (signalfd)?

Я не вижу такого поведения на страницах руководства и не могу найти исходный пример по этому поводу.

1 Ответ

0 голосов
/ 28 мая 2019

Вам нужно позвонить wait при получении SIGCHLD от signalfd.Об этом ясно свидетельствует ваш <defunct> вывод ps.

. Если вас не заботят коды возврата дочерних процессов, установите SIGCHLD для обработки SIG_IGN.Нет больше зомби.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...