c - 当子进程上有 SIGINT (Crtl+c) 时,waitpid 返回 0

标签 c waitpid

我在大学终端工作,但在寻找已完成的 child 时遇到了麻烦。

我有一个列表,其中保存了后台进程,这工作正常,但是当我将其带到前台并使用 ctrl+c 向他发送 SIGINT 信号时,waitpid 对所有未完成的 child 返回 1,除了我杀死的 child 。这是我的代码。我确信我的错误在于 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。它应该返回退出的子进程的 -10pid。尝试使用 waitpidwstatus 字段来准确调试 waitpid 认为子进程发生了什么。

关于c - 当子进程上有 SIGINT (Crtl+c) 时,waitpid 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47701194/

相关文章:

c - 在 C 中刷新 linux 串行缓冲区

c - 我将如何为结构数组实现堆栈?

c - 如何在执行进程之前等待子子进程和父进程?

c - 如何等待子进程并获取其返回值

c - 关于使用 fork() 创建的子进程的退出状态值的查询

c - 小端约定,并保存到二进制文件

c++ - 为什么操作系统分配的内存多于小型可执行文件所需的内存?

c - 如何正确使用数组函数

C: 'run' 命令使用 waitpid & 命令行输入

无法使用 waitid() 和 P_PID 进行编译