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