c - 如何运行 2 个子进程,但在 C 中一个接一个地运行?
问题描述
我试图在一个新程序中运行两个预制的可执行文件,但是在它们自己的子进程中运行这两个原始可执行文件,所以基本上,只需将父进程 fork() 分成两个子进程。但是,我看到很多关于并行运行多个子进程的问题,但我想先运行一个,等待第一个完成,然后再运行第二个。也许这不言而喻,但是之后,在第二个孩子完成后返回父进程(所以我可以打印一些消息,通知用户两个可执行文件都已完成)。我对使用 wait() 和 waitpid() 函数非常不熟练,这些对我想要做的事情非常重要。无论如何,有人可以给我一个快速的示例程序,以确保一个子进程运行在第二个之后?非常感谢您的参与!!
解决方案
system("command1");
system("command2");
这大致相当于以下内容:
{
const char* child_argv[] = { "command1", NULL };
pid_t pid = fork();
if (!pid) {
execvp(child_argv[0], child_argv);
exit(255); // errno should probably be sent to parent first.
}
waitpid(pid, NULL, 0);
}
{
const char* child_argv[] = { "command2", NULL };
pid_t pid = fork();
if (!pid) {
execvp(child_argv[0], child_argv);
exit(255); // errno should probably be sent to parent first.
}
waitpid(pid, NULL, 0);
}
在 POSIX 系统上,您可以spawn
使用fork
.
{
const char* child_argv[] = { "command1", NULL };
pid_t pid;
posix_spawnp(&pid, child_argv[0], NULL, NULL, child_argv, environ);
waitpid(pid, NULL, 0);
}
{
const char* child_argv[] = { "command2", NULL };
pid_t pid;
posix_spawnp(&pid, child_argv[0], NULL, NULL, child_argv, environ);
waitpid(pid, NULL, 0);
}
后两种解决方案避免使用 shell(如果您有文件名或路径而不是 shell 命令,这是一件好事)。
当然,所有三个片段都缺少错误检查。
推荐阅读
- javascript - 仅文本框 char 保存-重置框
- java - 根据点击次数,图像视图不可见
- python - PySpark - 获取重复行的索引
- html - 我应该如何将变量从 app.js 传递给我的 HTML 文件?
- twig - 无法将脚本部分加载到 html 标头中
- ssis - 我可以在一个带参数的 sql 任务中拥有多个更新语句吗?
- vue.js - Vue项目中的views和components文件夹有什么区别?
- shell - 反转相邻数字对
- jspdf - html2canvas 不适用于大型 HTML 内容
- python-3.x - 创建具有两个张量 tensorFlow 的字典