Dup2()导致子进程提前终止

dup2( ) causing child process to terminate early

本文关键字:终止 子进程 Dup2      更新时间:2023-10-16

我正在编写一个程序,它涉及到创建两组管道,以便父进程可以向子进程写入&子进程可以返回…

我的子进程有以下代码:

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'被写入到管道中。