Сигнал KILL немедленно завершает процесс?

Я работаю над серверным кодом, который использует fork () и exec для создания дочерних процессов. PID дочернего элемента регистрируется при успешном завершении fork () и очищается при обнаружении сигнала CHILD .

Если серверу необходимо остановиться, все программы будут уничтожены, в конечном итоге с сигналом KILL. Теперь это работает посредством перебора всех зарегистрированных PID и ожидания, пока обработчик сигнала CHILD удалит эти PID. Это не удастся, если дочерняя программа не завершилась должным образом. Поэтому я хочу использовать kill в сочетании с waitpid , чтобы гарантировать, что список PID будет очищен и зарегистрирован, а в противном случае выполнить некоторые другие действия.

Рассмотрим следующий пример кода:

kill(pid, SIGKILL);
waitpid(pid, NULL, WNOHANG);

Выдержка из waitpid (2) :

waitpid (): в случае успеха возвращает идентификатор процесса дочернего процесса, состояние которого изменилось; если указан WNOHANG и один или несколько дочерних (детей) указанный pid существует, но еще не изменил состояние, тогда возвращается 0. В случае ошибки возвращается -1.

Всегда ли процесс, заданный параметром pid , завершается до того, как сработает следующая функция? Будет ли waitpid всегда возвращать -1 в приведенном выше случае?

11
задан Lekensteyn 30 December 2011 в 12:00
поделиться