簡體   English   中英

system() 的非阻塞版本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM