繼承人我的代碼細目。C execv()函數是否終止子進程?
我有一個程序,分叉一個孩子(並在一個文件中註冊孩子的PID),然後做它自己的事情。孩子成爲程序員與argv端莊的任何程序。當孩子完成執行時,它發送一個信號(使用SIGUSR1)回到父進程,以便父進程知道從該文件中刪除孩子。父母應該停下來,通過更新其表格來確認已刪除的條目,並繼續保留它的位置。
pid = fork();
switch(pid){
case -1:{
exit(1);
}
case 0 :{
(*table[numP-1]).pid = getpid(); //Global that stores pids
add(); //saves table into a text file
freeT(table); //Frees table
execv(argv[3], &argv[4]); //Executes new program with argv
printf("finished execution\n");
del(getpid()); //Erases pid from file
refreshReq(); //Sends SIGUSR1 to parent
return 0;
}
default:{
... //Does its own thing
}
}
的問題是,在後execv成功啓動和完成(A printf語句之前返回0讓我知道),我沒有看到在switch語句中的命令的其餘部分正在執行。我想知道execv是否有一個^ C命令,它會在完成時殺死孩子,從而永遠不會完成剩下的命令。我查看了手冊頁,但沒有發現任何有用的主題。
謝謝!
解決一個完全不同的觀點:可以編寫table [numP-1] - > pid而不是(* table [numP-1])。pid – 2011-03-02 19:26:02