Резюме: мне нужен способ определить, умер ли процесс Windows, который я создал через _spawnl и взаимодействует с использованием FD из _pipe.
Подробности:
Яиспользование низкоуровневой функции CRT в Windows (_eof, _read) для связи с процессом, который был создан с помощью вызова _spawnl (с флагом P_NOWAIT).Я использую _pipe для создания файловых дескрипторов для связи с этим порожденным процессом и передаю эти дескрипторы (FD #) ему в командной строке.
Стоит отметить, что я не контролирую порожденный процесс,Для меня это черный ящик.
Оказывается, процесс, который мы порождаем, иногда падает.Я пытаюсь сделать мой код устойчивым к этому, обнаруживая сбой.К сожалению, я не вижу способа сделать это.Мне кажется разумным ожидать, что вызов _eof или _read для одного из этих дескрипторов вернет статус ошибки (-1), если процесс завершится.
К сожалению, это не так.Похоже, что дескрипторы живут своей жизнью независимо от порожденного процесса.Таким образом, хотя процесс на другом конце не работает, я не получаю статус ошибки в дескрипторе файла, который я использую для связи с ним.
У меня есть PID для вложенного процесса (возвращается из_spanwnl позвоните) но я не вижу ничего, что я могу сделать с этим.Мой код работает очень хорошо, за исключением одной вещи.Я не могу определить, занят ли порожденный процесс, вычисляя мне ответ или умер.
Если я смогу использовать информацию из _pipe и _spawnl, чтобы определить, мертв ли порожденный процесс, я буду золотой.
Предложения очень приветствуются.
Заранее спасибо.
ОБНОВЛЕНИЕ : я нашел довольно простое решение и добавил его в качестве выбранного ответа.