我们正在尝试使用系统调用在C中实现我们的自定义shell . 当我们尝试添加管道系统功能时,程序在打印管道操作的输出后直接终止 . 管道按原样运行 . 但通常我们的shell永远不会在enterin常规命令后终止 . 这是我们的管道代码:

while(1){
    if (childpid == 0) {
        dup2(pipefd[1], 1);
        close(pipefd[1]);
        execvp(pipeInput(args,counter)[0], pipeInput(args, counter);
        exit(0);
    } else if(childpid >0){
        dup2(pipefd[0], 0);
        close(pipefd[0]);
        close(pipefd[1]);
        wait(NULL);
        execvp(pipeOutput(args,counter)[0], pipeOutput(args, counter);
     }
}

pipeInputpipeOutput 方法在|之前和之后的组参数标志 . 他们工作正常 . args 保存该迭代中的所有参数 . 这不是完整的代码,但我认为这部分就足够了 . 我已尝试在顶级子项中使用 fork a new child ,并通过向其发送输出将顶级子项用作父项 . 这也适用于一次,循环进入下一次迭代 . 在第二次迭代中,当我尝试打印 ls | sort 时,它直接打印ls并挂起 .