Временно пренасочване на дъщерен процес stdout на Linux и Windows

Трябва да напиша програма за стартиране на процеси, която стартира друг процес и чете неговата стандартна грешка до определен флаг за състояние, но излиза след това. Стартираното приложение трябва да продължи да работи. Мога успешно да пренасоча stderr към канал и да го прочета от стартовия панел. Притеснението ми е какво се случва, след като стартерът спре. Четещият край на тръбата след това се затваря и приложението се опитва да пише в счупена тръба. Как се отменя пренасочването след стартиране на дъщерния процес?

Това, което прави проблема още по-предизвикателен, е, че стартерът е междуплатформен и трябва да бъде внедрен както в POSIX, така и в WinAPI.

Всички предложения за която и да е от платформите се оценяват много.


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


Отговори (1)


В случай че родителският процес (стартерът) излезе, ще се окажете (1) с осиротяващ процес и (2) със счупен канал за stderr. И двете неща звучат зле...

Някои идеи:

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

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

person Radu    schedule 05.05.2015