[英]Non-blocking version of system()
我想從我的 c 程序中啟動一個進程,但我不想等待該程序完成。 我可以使用 system() 啟動該進程,但總是等待。 有誰知道進程啟動后會立即返回的“非阻塞”版本?
[編輯 - 附加要求] 當原始進程執行完畢后,子進程需要繼續運行。
一個選項是在你的系統調用中,這樣做:
system("ls -l &");
命令行 arguments 末尾的 & 分叉您啟動的任務。
為什么不使用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...
正常的方法是popen ,實際上你不應該再使用 system() 了。
這也允許您從衍生進程的標准輸入/輸出讀取或寫入
編輯:如果您需要讀寫,請參閱 popen2() - 謝謝 quinmars
您可以使用posix_spawnp () function。它與 system() 的 fork 和 exec* 組合非常相似,但非阻塞。
最后,此代碼似乎有效。 以上答案有點混搭:
pid = fork();
if (!pid)
{
system("command here &");
}
exit(0);
不太清楚它為什么會起作用,但它做了我想要的,感謝大家的幫助
如果您正在尋找在特定時間后退出的命令,如何使用“超時”命令:
例如:系統(“超時 5 你的命令在這里”); // 如果進程未完成,則在 5 秒內終止命令
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.