如何等待子进程结束

How do I wait for child processes to end

本文关键字:子进程 结束 等待 何等待      更新时间:2023-10-16

标题不言自明。函数如下:

void fork_and_chain(int * pipein, int * pipeout, Command *cmd, int size)
{
    auto pid = fork();
    int status;
    if(!pid)
    {
        if(pipein) {
            dup2(pipein[0], 0);
            close(pipein[0]);
            close(pipein[1]);
        } else if (cmd->redirectin) {
            int fin = open(cmd->filename.c_str(), O_RDONLY);
            dup2(fin, 0);
            close(fin);
        }
        if(pipeout) {
            dup2(pipeout[1], 1);
            close(pipeout[0]);
            close(pipeout[1]);
        } else if (cmd->redirectout) {
            int fout = open(cmd->filename.c_str(), O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IRGRP | S_IWGRP | S_IWUSR);
            dup2(fout, 1);
            close(fout);
        }
        if (execvp(cmd->args_char[0], cmd->args_char.data()) < 0) {
            std::cerr << "Command not Found" << std::endl;
        }
    } else if (pid < 0) {
        std::cerr << "Fork failed." << std::endl;
        exit(1);
    } else {
        // waiting for child process to finish
    }
}

无论我放在那里什么,我都会得到一个无限循环(我正在制作一个外壳)。我要么无限期地得到"cmd"提示,要么什么都没有。链接代码继续运行,我不知道是否要终止它。

我想你正在寻找waitpid()。 在您的评论部分添加:

int status = 0;
waitpid(pid, &status, 0);
std::cerr << "child finished with status: " << status << std::endl;