2011-02-17 2 views
0

몇 가지 코드가 있습니다. 여기서는 여러 프로세스가 분기하여 생성됩니다. 모든 프로세스는 일부 셸 명령을 실행하는 popen() 함수를 가지고 있습니다. 문제는 이러한 모든 프로세스가 동일한 입/출력 스트림을 사용한다는 것입니다. 프로세스가 하나의 스트림에 동시에 쓰므로 충돌이 발생할 때 이러한 상황이 발생합니다.각 분기 프로세스마다 다른 입출력 스트림

모든 문제가있는 프로세스가 자체 스트림을 사용하도록 문제를 해결할 수있는 방법이 있습니까? 내 경우에 포크로 무엇이든 할 수 없습니다.

+0

일부 코드를 표시하십시오. 의미가 명확하지 않습니다. –

답변

2

자식 프로세스에서 stdin 및 stdout을 닫거나 다시 열어야합니다. 가능하다면 포크 직후에 닫아야합니다.

1

fork()를 호출하면 부모 프로세스에서 파일 설명자 (stdin, stdout 등)가 상속됩니다. popen 할 때 공유 stdin/stdout을 가져 와서 popened 프로세스로 파이프 할 것입니다. 당신이 포크 다음에 열린 파일 디스크립터를 닫고 다시 열려고하는 것 같습니다.