Я перенаправляю вывод программы (программа «exec'ed») с разветвленным процессом («pipe2file»), который обрабатывает чтение из трубы и записи в файл.Убив процесс, который отвечает за перенаправление stdout в файл, делает его зомби
Если программа «exec'ed» была убита, и ее состояние ожидания будет получено, то же самое нужно сделать для процесса «pipe2file».
Итак, что я делаю именно это:
- закрытия конца трубы, что она использовала
- посылает сигнал убить через
kill(pipe2file, SIGKILL)
- с помощью waitpid, чтобы пожинать ее статус выхода, как этот
waitpid(pipe2file, &status, 1)
статус
- проверки с
if (WIFEXITED(status) || WIFSIGNALED(status))
Still, после вышеуказанных шагов, процесс pipe2file заканчивается зомби.
Что не так?
Если я изменяю параметр на 0, программа зависает при этом ожидании. Почему процесс, ответственный за чтение из трубы и запись в файл, не прерывается? Когда процесс, использующий конец записи, уже вышел? – Chris
@Chris Вам нужно будет опубликовать исходный код этого процесса, чтобы я сказал вам об этом. Вы всегда можете присоединить отладчика к ребенку и посмотреть, что он делает. –