如何在C中执行多个进程?

时间:2016-03-08 16:16:26

标签: c

我需要创建一个程序,从用户那里获取输入并像在终端中一样执行它。我正在使用execvp()函数来实现此目的。除非遇到quit调用,否则程序的要求是继续从用户那里获取输入。这里的问题是在execvp()调用后替换当前程序。因此,使用goto也不是一种选择。我发现了这篇Fork–exec文章,但它没有说明如何创建无限数量的进程。这是我的代码:

#include <unistd.h>
#include <stdio.h>
#include <string.h>

void main() {

char *args[4];
char inputCommand[100];
fgets (inputCommand, 100, stdin);
printf ("Splitting string \"%s\" into tokens:\n",inputCommand);

/* Perfrom string tokenization here */

execvp(args[0], args);
}

2 个答案:

答案 0 :(得分:2)

fork()可以无限次调用;只要返回值表明您是父进程,就可以继续照常操作并再次调用。

因此,您可以拥有一个循环,在您循环的过程中,如果您是子进程,则调用execvp(),如果您是父进程,则继续下一次迭代。

答案 1 :(得分:1)

Execvp使用您运行的命令替换当前进程映像。所以它取消了你的C程序。要产生所需的效果,你应该在execvp之前进行分叉。它看起来像这样:

int status = 0;
pid_t pid = fork();

if(pid > 0) {
    waitpid(pid, &status, 0);
    // is parent
} else if(pid == 0) {
    execvp(*args, args);
    // is child
} else {
    // fork didn't work
}