Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When to use system() and when to use execv*()?

Tags:

c

unix

exec

I need to execute a unix command with different args in a loop. Now I wonder if I should use execvp(), passing in the cmd and the args, or use system, building a string consisting of cmd + args?

like image 902
helpermethod Avatar asked Feb 18 '10 14:02

helpermethod


2 Answers

Well, the other answers are mostly correct.

System, while not only forks and then execs, it doesn't exec your process, it runs the default shell, passing your program as an argument.

So, unless you really want a shell (for parameter parsing and the like) it is much more efficient to do something like:

int i = fork();
if ( i != 0 ) {
    exec*(...); // whichever flavor fits the bill
} else {
    wait(); // or something more sophisticated
}
like image 91
Jeff Walker Avatar answered Oct 02 '22 16:10

Jeff Walker


The exec family of functions will replace the current process with a new one, whilst system will fork off the new process, and then wait for it to finish. Which one to use depends on what you want.

Since you're doing this in a loop, I guess you don't want to replace the original process. Therefore, I suggest you try to go with system.

like image 24
Hans W Avatar answered Oct 02 '22 14:10

Hans W