gpt4 book ai didi

c++ - 使用 execl() 执行连续进程

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:09 28 4
gpt4 key购买 nike

我有一个希望很简单的问题。我想连续执行三个名为“brute_seq”、“brute_pth”和“brute_omp”的程序;基本上执行“brute_seq”,等到它完成,然后执行“brute_pth”,对“brute_omp”执行同样的事情。

我尝试了几种不同的方法,到目前为止,我想出的最好的解决方案是这个,尽管它不是我需要的。

#include <unistd.h>
int main()
{
if(fork() == 0)
execl("brute_seq", (const char*)NULL, (char*)NULL);

if(fork() == 0)
execl("brute_pth", (const char*)NULL, (char*)NULL);

if(fork() == 0)
execl("brute_omp", (const char*)NULL, (char*)NULL);
return 0;
}

据我了解, fork 进程将运行 execl() 命令,该命令又将用被调用进程替换 fork 进程 - 这确保我的 fork 进程在被调用进程结束时终止。

这个实现有两个问题:

  1. 进程不是按顺序执行,而是并行执行,这是我不希望的。
  2. 一旦它们全部执行完毕,我的终端将以与由于同步不良而遇到死锁时类似的方式阻塞,除了更糟的情况,因为我无法按 CTRL-Z 退出它;我必须退出终端并再次打开它。

有什么想法吗?


感谢 Joachim 的有用提示,下面是完全符合我要求的工作代码:

#include <sys/wait.h>
#include <unistd.h>
int main()
{
pid_t child_pid;
int status;

if((child_pid = fork()) == 0)
execl("brute_seq", (const char*)NULL, (char*)NULL);
else
{
waitpid(child_pid, &status, 0);
if((child_pid = fork()) == 0)
{
execl("brute_pth", (const char*)NULL, (char*)NULL);
}
waitpid(child_pid, &status, 0);
execl("brute_omp", (const char*)NULL, (char*)NULL);
}
return 0;
}

最佳答案

你必须 wait关于要完成的过程。它还具有在完成后清理子僵尸进程的副作用。

关于c++ - 使用 execl() 执行连续进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15729172/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com