使用execvp执行我在数组中的命令

时间:2016-01-31 02:24:15

标签: c linux process command exec

我有一个命令数组,我想在这个数组中执行每个命令,但我似乎无法让它工作,所以我有

childPid = fork();


for(int i =0;i < numOfCommands;i++)
{
    if(childPid == 0)
    {
        execvp(commands[i], argv);
        perror("exec failure");
            exit(1);
    }
    else 
    {
        wait(&child_status);
    }


}

这是做什么的,它只是在我的阵列中执行第一个命令但是没有继续进行,我将如何继续?

如果我想让命令的顺序随机执行并且结果混合,那么我必须使用fork呢?

1 个答案:

答案 0 :(得分:2)

如果要执行多个程序,则无论如何都需要使用fork。来自man exec :(强调添加)

  

exec()系列函数用新的过程映像替换当前过程映像。

     

...

     

exec()函数仅在发生错误时返回。

通过使用fork,您可以使用相同的图像创建新进程,并且可以通过调用exec来替换子进程中的图像,而不会影响父进程,然后可以将其自由{ {1}}和fork次数达到目的。

不要忘记wait子进程终止。否则,当他们死亡时,他们将成为zombies。在上面链接的exec联机帮助页中有一个完整的示例。