我在大学工作的终端工作,但在寻找已婚孩子时我遇到了麻烦。
我有一个列表,我保存后台进程,这很好,但当我把它带到前台,我发送一个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,命令和指向下一个节点的指针。
答案 0 :(得分:3)
waitpid
永远不应该返回1
。它应该返回-1
,0
或退出的孩子的pid
。尝试使用wstatus
的{{1}}字段来准确调整waitpid
对孩子的看法。