[英]“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);
通常,子進程在完成執行后會終止。 父母或其他程序可以隨時殺死孩子。 父母可以使用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.