Временно перенаправить дочерний процесс stdout в Linux и Windows

Мне нужно написать средство запуска процесса, которое запускает другой процесс и считывает его стандартную ошибку до определенного флага состояния, но после этого завершает работу. Запущенное приложение должно продолжать работать. Я могу успешно перенаправить stderr в канал и прочитать его из панели запуска. Меня беспокоит то, что происходит после закрытия лаунчера. Затем конец канала для чтения закрывается, и приложение пытается записать в сломанный канал. Как отменить перенаправление после запуска дочернего процесса?

Что делает проблему еще более сложной, так это то, что средство запуска является кроссплатформенным и должно быть реализовано как в POSIX, так и в WinAPI.

Любые предложения на любой из платформ высоко ценятся.


person oddin    schedule 01.04.2014    source источник


Ответы (1)


В случае выхода родительского процесса (программы запуска) вы окажетесь (1) с осиротевшим процессом и (2) со сломанным каналом для stderr. Обе эти вещи звучат плохо...

Некоторые идеи:

  1. Перенаправьте stderr в файл (думаю, вы все равно захотите сохранить все сообщения об ошибках). Родительский/пусковой/или любой другой процесс мониторинга может считывать из файла столько, сколько необходимо, в любое время и без ошибок ввода-вывода.

  2. Отсоедините программу от лаунчера. Обычно это делается с помощью fork(), за которым следует execve() в разветвленном дочернем процессе.

person Radu    schedule 05.05.2015