Ответ 1
В вашем системном вызове есть один вариант:
system("ls -l &");
и в конце аргументов командной строки открывается задача, которую вы запустили.
Я хочу запустить процесс из моей программы c, но я не хочу ждать завершения этой программы. Я могу запустить этот процесс с помощью системы(), но всегда жду. Кто-нибудь знает о "неблокирующей" версии, которая вернется сразу после запуска процесса?
[Изменить - дополнительное требование] Когда исходный процесс завершил выполнение, дочерний процесс должен продолжать работать.
В вашем системном вызове есть один вариант:
system("ls -l &");
и в конце аргументов командной строки открывается задача, которую вы запустили.
Почему бы не использовать 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...
Нормальный способ сделать это, и на самом деле вы не должны использовать system() больше popen.
Это также позволяет вам читать или писать из порожденного процесса stdin/out
edit: см. popen2(), если вам нужно читать и писать - thansk quinmars
Вы можете использовать posix_spawnp(). Он очень похож на system(), чем комбинация fork и exec *, но не блокирует.
В конце концов, этот код работает. Немного ошибочного ответа на приведенные выше ответы:
pid = fork();
if (!pid)
{
system("command here &");
}
exit(0);
Не совсем уверен, почему он работает, но он делает то, что мне нужно, благодаря всем за вашу помощь.