Dup2()导致子进程提前终止
dup2( ) causing child process to terminate early
我正在编写一个程序,它涉及到创建两组管道,以便父进程可以向子进程写入&子进程可以返回…
我的子进程有以下代码:
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条件测试下方时则不会输出,因此我确信这就是我的问题所在)
Thanks in advance
调用dup2(fd2[WRITE_END],STDOUT_FILENO)将STDOUT (c++ cout流使用)连接到fd2管道。所以'test output'被写入到管道中。
相关文章:
- 终止 QProcess 不会终止子进程
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- ZMQ::send() 抛出异常并终止 QNX 进程.为什么以及如何从中恢复?
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 检测到由于操作系统内存不足而导致子进程终止
- 使用信号检测子进程何时终止的最佳方法是什么?
- 无法检测子进程是否已终止
- 我无法使用终止进程杀死子进程
- 子进程在 fork 中 3 秒后自行终止
- 截获非终止子进程C++的stdout
- 当父NT服务被终止/崩溃时,终止子进程
- Fork进程:在子进程终止时恢复父进程(Linux)
- 在所有子进程终止后,不能运行父进程
- Dup2()导致子进程提前终止
- 从Python子进程终止时的c++调用函数
- CreateProcess,使子进程在父进程被终止时被终止
- 何时应该终止MPI子进程
- 杀死父进程时终止所有子进程