![](/img/trans.png)
[英]c - does waitpid() and co detect child termination only when all children are terminated?
[英]waitpid returns 0 when SIGINT (Crtl+c) on a children
我在碼頭上工作,正在上大學,但在尋找已成年的孩子時遇到了麻煩。
我有一個列表,我在其中保存了后台進程,並且工作正常,但是當我將其放到前台並用ctrl + c向他發送SIGINT
信號時, waitpid
對所有未完成的孩子返回1,但我殺死了一個。 那是我的代碼。 我確定我的錯誤是在該waitpid
,但是我不知道為什么返回錯誤的值。 我要我的代碼執行的操作是選擇使用SIGINT
殺死進程並將其殺死並從列表中刪除它,但保留未完成的命令。
int emptyBackground(List *list){
ListNode *aux = list->first;
ListNode *aux2 = NULL;
while(aux != NULL){
if(waitpid(aux->pid, NULL, WNOHANG) > 0){ // This waitpid returns a non expected value
if(aux2 != NULL){
aux2->next = aux->next;
free(aux);
aux = aux2->next;
}else{
list->first = aux->next;
free(aux);
aux = list->first;
}
}else{
aux2 = aux;
aux = aux->next;
}
}
return 0;
}
PD:我的列表包含命令pid,命令和指向下一個節點的指針。
waitpid
永遠不會返回1
。 它返回值應該是-1
, 0
,或pid
是離開孩子。 嘗試使用waitpid
的wstatus
字段來調試確切的waitpid
認為孩子發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.