我希望这是一个简单的问题。我想连续执行三个名为“brute_seq”,“brute_pth”和“brute_omp”的程序;基本上执行“brute_seq”,等到它完成,然后为“brute_omp”执行“brute_pth”和同样的事情。
我尝试过这几种不同的方式,到目前为止,我提出的最好的解决方案就是这个,虽然这不是我需要的。
#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;
}
根据我的理解,分叉进程将运行execl()命令,而该命令又将分叉进程替换为被调用进程 - 这确保了我的分叉进程在被调用进程结束时终止。
这个实现有两个问题:
有什么想法吗?
感谢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;
}