Отмена перехвата консоли дочернего процесса
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.01.26 12:03
Оценка:
Коллеги, всем привет. Случайно возник вот такой вот архитектурно-философский вопрос.
Сценарий: консольная программа А использует в работе консольную программу Б.
При этом есть два под-сценария:
1. К моменту старта А программа Б уже запущена. Тогда она торчит на каком-то порту 127.0.0.1, программа А подключается туда и делает всё необходимое.
1. К моменту старта А программы Б нет. Тогда А должна сначала запустить Б, и уже потом подключиться.
Нюанс — в том, что после окончания работы А программа Б должна продолжить свою работу ещё какое-то время.
И при этом нам бы хотелось помочь пользователю диагностировать неполадки запуска программы Б.
Сама Б пишет всё, что с ней происходит, в консоль и в лог-файл.
Так что если бы пользователь сам запускал Б, то он бы увидел вывод Б в консоль, и если ей что-то мешает запуститься — там была бы диагностика.

Ок, А в случае если запускает Б, то перехватывает её stout/stderr, и транслирует их пользователю.
И вот мне ИИ на эту тему говорит: постой, но когда А выйдет, а Б останется работать, то попытки Б писать в консоль могут приводить к E_PIPE.
На вопрос "и чо делать", ИИ предлагает перестать читать консоль Б, а вместо этого tail-ить лог-файл Б.
Но юмор в том, что одна из возможных причин неудачи старта Б — отсутствие прав на запись в дефолтный каталог лога

В связи с чем, собственно, вопрос — есть ли кросс-платформенный способ аккуратно отключиться от stdout дочернего процесса?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.