簡體   English   中英

當子對象上的SIGINT(Crtl + c)時,waitpid返回0

[英]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 它返回值應該是-10 ,或pid是離開孩子。 嘗試使用waitpidwstatus字段來調試確切的waitpid認為孩子發生了什么。

暫無
暫無

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

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