当孩子的SIGINT(Crtl + c)时,waitpid返回0

时间:2017-12-07 18:06:22

标签: c waitpid

我在大学工作的终端工作,但在寻找已婚孩子时我遇到了麻烦。

我有一个列表,我保存后台进程,这很好,但当我把它带到前台,我发送一个SIGINT信号与ctrl + c 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,命令和指向下一个节点的指针。

1 个答案:

答案 0 :(得分:3)

waitpid永远不应该返回1。它应该返回-10或退出的孩子的pid。尝试使用wstatus的{​​{1}}字段来准确调整waitpid对孩子的看法。