2012-03-18 1 views
0

Я создал приложение, которое запускает несколько дочерних процессов с использованием fork и execv.stdin для родительского процесса заблокирован при вызове execv

string process; //initialized before execv call 
char** process_args; //initialized before execv call 
int pid = fork(); 
if(pid == 0) { 
    execv(process.c_str(), process_args); 
} 

процессы запуска, но они блокируют доступ родителей к STDIN до каждого ребенка выходов. Я хотел бы, чтобы родительский процесс имел доступ к STDIN, пока дочерние процессы все еще запущены.

Возможно ли это, и если да - как? Мне не нужно использовать execv. Эти процессы не обязательно должны иметь какое-либо представление друг о друге после их запуска.

Спасибо!

+0

Посмотрите, поможет ли это. http://stackoverflow.com/q/1720535/1250303 – Java42

ответ

0

Закройте ребенка STDIN до exec*().

+1

Я пытался только закрыть 'STDIN', но обнаружил, что мне нужно закрыть все потоки (' IN', 'OUT' и' ERR') для консоли родителя не блокироваться. Любая идея, почему это так? Кроме того, когда родительский процесс теперь закрыт, дочерний процесс не убивается, но он был раньше. Почему это происходит? Благодаря! – zsalzbank