簡體   English   中英

“ execv”子進程的存在和終止

[英]“execv” child process existance and termination

popen()替代 -我正在使用accepted答案(pipe / fork / exec方法)來解決我的問題。 唯一的區別是,我使用的是execv而不是execl

現在,我的問題是,父進程對execv創建的子進程有任何控制權嗎? 可以說,在accepted答案中建議的整個順序是拖尾1個文件,而我有很多這樣的文件。 我將整個序列放在一個函數中,如果我在某個時間點多次調用此函數,是否可能會有很多子tail進程?

我想知道的是,1)我可以在任何時間運行多個子進程嗎? 2)子進程(由execv創建)如何終止? execv調用之后,父母是否知道子進程(由execv創建)何時完成/終止? -回答。

Execl和execv的行為方式相同。 唯一的區別是您如何指定參數向量 “ l”函數將參數向量作為逗號分隔的列表。 例如,

execl("/bin/ls", "/bin/ls", "-r", "-t", "-l", NULL);

“ v”函數將參數向量作為實際向量。 例如,

char *args[] = {"/bin/ls", "-r", "-t", "-l", NULL };
execv("/bin/ls", args);

有關C中過程控制的信息,請參見此處此處

通常,子進程在完成執行后會終止。 父母或其他程序可以隨時殺死孩子。 父母可以使用waitpid()函數來等待,直到孩子完成執行或檢查孩子是否完成執行。

父母接收到SIGCHLD信號。

如果您的管道來自孩子的性病,通常可以通過觀察管道是否達到EOF來避免信號/等待加重。 您仍然可以通過http://en.wikipedia.org/wiki/Zombie_process收割孩子以避免僵屍(如果您不關心孩子的退出狀態,通常使用雙叉來完成,因此您可以真正子進程作為孫子並獲得中間子)。 GLib代碼可能是最復雜的示例: http : //git.gnome.org/browse/glib/tree/glib/gspawn.c#n1191

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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