to system() or fork()/exec()?

c, c++, fork

Solution

`system` executes a command-interpreter, i.e. a shell, which (a) is slower than a direct fork/exec, (b) may behave differently on different systems and (c) is a potential security hazard if you pass it a string from an untrusted source. Also, `system` waits for the child process to exit, while you might want it to run concurrently with the parent process.

More in general, the low-level fork/exec gives you additional control: before or in between the two operations, you might want to `chdir`, open pipes, close file descriptors, set up shared memory, etc.

(By different systems, I don't mean Windows vs. Unix (as Windows doesn't even have fork): I'm talking Red Hat Linux vs. Ubuntu. The former uses Bash to execute what is passed to `system`, the latter a lightweight POSIX-compatible shell.)

Problem

There appear to be two common ways of running an external executable from C in unix, the ``` system() ``` call and ``` pid = fork() switch(pid) //switch statement based on return value of pid, //one branch of which will include and exec() command ``` Is there any reason to prefer a fork/exec over system in the case where they are functionally equivalent (parent process waits for child to finish, no complex information is returned from child)?.

Original source

Related problems