Неблокирующая версия системы()

Я хочу запустить процесс из моей программы c, но я не хочу ждать завершения этой программы. Я могу запустить этот процесс с помощью системы(), но всегда жду. Кто-нибудь знает о "неблокирующей" версии, которая вернется сразу после запуска процесса?

[Изменить - дополнительное требование] Когда исходный процесс завершил выполнение, дочерний процесс должен продолжать работать.

Ответы

Ответ 1

В вашем системном вызове есть один вариант:

 system("ls -l &");

и в конце аргументов командной строки открывается задача, которую вы запустили.

Ответ 2

Почему бы не использовать fork() и exec() и просто не вызывать waitpid()?

Например, вы можете сделать следующее:

// ... your app code goes here ...
pid = fork();
if( pid < 0 )
    // error out here!
if( !pid && execvp( /* process name, args, etc. */ )
    // error in the child proc here!
// ...parent execution continues here...

Ответ 3

Нормальный способ сделать это, и на самом деле вы не должны использовать system() больше popen.
Это также позволяет вам читать или писать из порожденного процесса stdin/out

edit: см. popen2(), если вам нужно читать и писать - thansk quinmars

Ответ 4

Вы можете использовать posix_spawnp(). Он очень похож на system(), чем комбинация fork и exec *, но не блокирует.

Ответ 5

В конце концов, этот код работает. Немного ошибочного ответа на приведенные выше ответы:

pid = fork();

if (!pid)
{
    system("command here &");
}

exit(0);

Не совсем уверен, почему он работает, но он делает то, что мне нужно, благодаря всем за вашу помощь.