Функция system()
без обработки ошибок выглядит следующим образом:
int system(char const *cmdline)
{
pid_t pid = fork();
if(pid == 0)
{
char const *argv[] = { "sh", "-c", cmdline, NULL };
execve("/bin/sh", argv, NULL);
_exit(1);
}
else
{
int status;
waitpid(pid, &status, 0);
return status;
}
}
Сама команда анализируется оболочкой, поэтому вы можете использовать обычный суффикс &
для отправки команды в фоновый режим. Затем оболочка немедленно завершает работу, фоновая программа переопределяется в PID 1 (поэтому ваша программа не отвечает за сбор зомби), и system()
возвращает.