因此,我正在编写一个程序,该程序涉及创建 2 组管道,以便父进程可以写入子进程,而子进程可以立即返回......
我的子进程有以下代码:
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 是在单独的 if 语句中完成的......当我将测试输出放在测试下面时dup2(fd1[READ_END],STDIN_FILENO) < 0
,它会输出,但当我把它放在另一个 dup2 条件测试下面时却没有,所以我确信这就是我的问题所在)
提前致谢