2013-03-07 1 views
0

부모 프로세스가 자식 프로세스에 쓸 수 있도록 파이프 세트 2 개가 포함 된 프로그램을 작성 중입니다 & 자식 프로세스가 바로 돌아올 수 있습니다 ...dup2() 하위 프로세스가 일찍 종료되는 원인이 됨

내 자식 프로세스에 대해 다음 코드를 :

if(pid==0){ //child process 
     cout << "executing child" << endl; 
     close(fd1[WRITE_END]); 
     close(fd2[READ_END]); 
     if(dup2(fd1[READ_END],STDIN_FILENO) < 0 || dup2(fd2[WRITE_END],STDOUT_FILENO) < 0){ 
      cerr << "dup2 failed" << endl; 
      exit(1); 
     } 
     cout << "test output" << endl; 
     close(fd2[WRITE_END]); 
     close(fd1[READ_END]); 
     read(fd1[READ_END],buf,BUFFER_SIZE); 
     cout << "Child process read " << buf << endl; 
     execl("/bin/sort", "sort", "-nr", NULL); 


    } else { //... parent process 

내 프로그램을 실행, 내가 자식 프로세스에서 출력으로 얻을 모든 executing child하지만 test output입니다. 그러나 dup2 호출을 처리하는 if 문을 제거하면 출력에 test output이 포함됩니다.

dup2로 인해 내 하위 프로세스가 종료되지 않는 이유에 대한 아이디어는 있습니까?

(그리고 그런데, 원래 내 두 dup2가의의는 별도의에서 수행되었다 경우 문 ... 나는 dup2(fd1[READ_END],STDIN_FILENO) < 0 테스트 아래의 테스트 출력을 넣을 때, 출력,하지만 내가 다른 dup2에 조건 테스트 아래에 넣어 때 내 문제이고, 그래서

답변

2

통화가 dup2가하는 사전에

감사) 그건 있다는 확신은 (FD2 [WRITE_END, STDOUT_FILENO는) 당신의 FD2에 C++ cout을 스트림)에 의해 사용되는 STDOUT을 (연결 파이프. 따라서 '테스트 출력'이 파이프에 기록됩니다.

+0

오, 내, 얼마나 바보 같은 짓인가. 그걸 지적 해 주셔서 고맙습니다. –

관련 문제