如何等待子进程结束
How do I wait for child processes to end
标题不言自明。函数如下:
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;
相关文章:
- 终止 QProcess 不会终止子进程
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 当进程结束时,如何保持由 QProcess 执行的命令?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- kill() 总是返回 0(成功),即使在子进程已经结束之后?
- 父进程和子进程之间的 POSIX 信号量
- 检测到由于操作系统内存不足而导致子进程终止
- WaitForSingleObject 不会等待进程结束
- 使用system()创建独立的子进程
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- 在 Bash 脚本中处理来自子进程的信号
- Qt C++ - 如何成功将数据传递给子进程?
- C++ 窗口本地系统模拟在子进程中失败
- 将类型化数组写入子进程 stdin 无法正常工作
- 将 nodejs 脚本作为子进程执行(而不是从其他脚本执行)
- 如何等待子进程结束