What is the difference between system
and exec
family commands? Especially I want to know which one of them creates child process to work?
system()
calls out to sh
to handle your command line, so you can get wildcard expansion, etc. exec()
and its friends replace the current process image with a new process image.
With system()
, your program continues running and you get back some status about the external command you called. With exec()
, your process is obliterated.
In general, I guess you could think of system()
as a higher-level interface. You could duplicate its functionality yourself using some combination fork()
, exec()
, and wait()
.
To answer your final question, system()
causes a child process to be created, and the exec()
family do not. You would need to use fork()
for that.