我需要在循环中执行带有不同args的unix命令。现在我想知道我是否应该使用execvp(),传入cmd和args,或使用系统,构建一个由cmd + args组成的字符串?
答案 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和一些信号处理。