我想从我的c程序中启动一个进程,但我不想等待该程序完成。我可以使用system()启动该进程,但始终等待。有没有人知道一个“非阻塞”版本会在流程启动后立即返回?
[编辑 - 附加要求]当原始进程执行完毕后,子进程需要继续运行。
答案 0 :(得分:19)
您的系统调用中有一个选项,请执行以下操作:
system("ls -l &");
&&在命令行的末尾,参数会分叉您已启动的任务。
答案 1 :(得分:16)
为什么不使用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...
答案 2 :(得分:7)
正常的做法,实际上你不应该再使用system()了popen。
这也允许您从生成的进程的stdin / out
编辑:如果你需要读写,请参阅popen2() - thansk quinmars
答案 3 :(得分:1)
您可以使用posix_spawnp()函数。它与system()非常类似于fork和exec *组合,但是非阻塞。
答案 4 :(得分:0)
最后,此代码似乎有效。上述答案的错误混淆:
pid = fork();
if (!pid)
{
system("command here &");
}
exit(0);
不太确定为什么它可以正常工作,但它确实是我所追求的,感谢大家的帮助
答案 5 :(得分:0)
如果要在特定时间后退出命令,如何使用“超时”命令:
例如:system(“超时5您的命令在这里”); //如果未完成,则在5秒内终止命令