У меня есть цикл while, который читает данные из дочернего процесса, используя блокировку ввода-вывода, перенаправляя stdout
дочернего процесса в родительский процесс.Обычно, как только завершается дочерний процесс, в этом случае возвращается блокировка read()
, поскольку канал, из которого выполняется чтение, закрывается дочерним процессом.
Теперь у меня есть случай, когда read()
вызов не завершается для дочернего процесса, который заканчивается в состоянии зомби.Таким образом, операционная система ждет, пока мой код пожнет его, но вместо этого мой код блокируется при вызове read()
.
У самого дочернего процесса нет никаких дочерних процессов, работающих во время зависания,и я не вижу никаких файловых дескрипторов, перечисленных при поиске в /proc/<child process PID>/fd
.Дочерний процесс, тем не менее, разветвлял два демонических процесса, цель которых, по-видимому, заключается в мониторинге дочернего процесса (дочерний процесс является проприетарным приложением, над которым я не имею никакого контроля, поэтому трудно сказать наверняка).
При запуске из терминала дочерний процесс, который я пытаюсь read()
из, автоматически завершается, и, в свою очередь, демон, обрабатывающий его разветвленную систему, также завершается.
Версия Linux 4.19.2.
Что может быть причиной того, что read()
не возвращается в этом случае?
Последующие действия: Как избежать зависания `read ()` в следующей ситуации?