Предположим, что я запускаю процесс PO через popen
(ТОЧНО ТОЧНО) из процесса PA. Я тогда pclose()
труба на стороне PA.popen & status of pipe
На стороне PO, как определить, stdout по-прежнему доступен без выполнения write()
?
Обратите внимание, что я попытался поймать SIGPIPE на стороне ПО безрезультатно.
ОБНОВЛЕНО: Я пробовал использовать fstat(1, &buf)
без успеха.
ОБНОВЛЕНО: Причина, по которой я должен обнаружить это условие через ПО, у меня нет доступа к PID PID из PA (и, следовательно, он не может его убить). Более того, я бы хотел, чтобы PO был более устойчивым в случае сбоев в лице PA, то есть выходил сам по себе.
РЕШЕНИЕ: Я пошел и использовал socketpair
, fork
. Попытка контролировать процесс через popen
оказалась кошмаром (по крайней мере для меня). Большое спасибо всем, кто внес свой вклад!
Почему вы не можете просто отправить PO свой PID через трубу? – Duck
На самом деле кажется, что вы нажимаете пределы popen() здесь. Почему бы вам не пойти на развилку (и т. Д.)? – Duck
@ Duck: я могу отправить PID через STDOUT, но 2 вещи: 1) больше логики с другой стороны, 2) все еще ПО не может совершать харакири, зная состояние трубы STDOUT. – jldupont