сервер — Как отслеживать, какие все дочерние процессы убиты в переполнении стека

Я пишу сервер. Оно использует fork() создавать новые дочерние процессы. Я хочу убить дочерние процессы, когда родительский процесс умирает. Я планирую использовать массив для хранения pids дочерних процессов. Но есть вероятность, что дочерний процесс может завершиться до родительского процесса. В этом случае, если мы позвоним kill использовать функцию SIGKILL и pid дочернего процесса, который уже завершился, вызовет ли исключение?

0

Решение

Когда дочерний процесс завершается, SIGCHLD Сигнал отправляется родителю. Вы можете обработать этот сигнал в родителе, чтобы проверить, какой ребенок завершил свою работу самостоятельно, прежде чем у вас появится возможность wait для этого. И ты должен wait() для всех детей, чтобы избежать зомби-процессов.

Вы также можете взглянуть на этот поток для альтернативного способа завершения дочерних процессов при завершении родительского: Как заставить дочерний процесс умереть после родительского выхода?

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]