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

hel*_*hod 12 c unix exec

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

Jef*_*ker 10

那么,其他答案大多是正确的.

系统,虽然不仅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
}
Run Code Online (Sandbox Code Playgroud)


Han*_*s W 8

exec系列函数将更换一个新的当前进程,而system将叉掉新的进程,然后等待它完成.使用哪一个取决于你想要什么.

由于你是在循环中这样做的,我猜你不想替换原始进程.因此,我建议你试着去system.


APr*_*mer 6

只有当我无法实现我想要的系统时才会使用execvp.请注意,要获得系统的等效,您还需要execvp,fork和一些信号处理.