부모 프로세스가 자식 프로세스에 쓸 수 있도록 파이프 세트 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에 조건 테스트 아래에 넣어 때 내 문제이고, 그래서
오, 내, 얼마나 바보 같은 짓인가. 그걸 지적 해 주셔서 고맙습니다. –