何时使用system()以及何时使用execv *()?

时间:2010-02-18 14:38:24

标签: c exec unix

我需要在循环中执行带有不同args的unix命令。现在我想知道我是否应该使用execvp(),传入cmd和args,或使用系统,构建一个由cmd + args组成的字符串?

3 个答案:

答案 0 :(得分:9)

嗯,其他答案主要是正确。

系统,虽然不仅fork s而且exec s,它不是exec你的进程,它运行默认shell,将你的程序作为参数传递。

所以,除非你真的需要一个shell(用于参数解析等),否则 更有效地执行以下操作:

int i = fork();
if ( i != 0 ) {
    exec*(...); // whichever flavor fits the bill
} else {
    wait(); // or something more sophisticated
}

答案 1 :(得分:8)

exec系列函数将用新的函数替换当前进程,而system将分离新进程,然后等待它完成。使用哪一个取决于你想要的。

由于您是在循环中执行此操作,我想您不想替换原始进程。因此,我建议您尝试使用system

答案 2 :(得分:6)

只有当我无法达到我想要的系统时才会使用execvp。请注意,要获得系统的等价物,您还需要execvp,fork和一些信号处理。