我想从我的c程序中启动一个进程,但是我不想等待该程序完成。我可以使用system()启动该进程,但始终会等待。是否有人知道“非阻塞”版本将在流程启动后立即返回?
[[编辑-附加要求]当原始进程完成执行后,子进程需要继续运行。
您的系统调用中有一个选项,执行此操作:
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中读取或写入
编辑:如果需要读写,请参见popen2()-thansk quinmars
您可以使用posix_spawnp()函数。它比fork和exec *组合与system()非常相似,但是是非阻塞的。
最后,此代码似乎有效。上面的答案有些混乱:
pid = fork();
if (!pid)
{
system("command here &");
}
exit(0);
不太清楚为什么可以用,但是它可以满足我的要求,感谢大家的帮助
如果您要在特定时间后退出命令,如何使用“超时”命令:
例如:system(“超时5您的命令在这里”); //如果未完成,则在5秒钟内杀死命令