Я работаю в терминале для университетской работы, но у меня проблемы с поиском готовых детей.
У меня есть список, в котором я сохраняю фоновые процессы, и это работает нормально, но когда я вывожу его на передний план и посылаю ему сигнал 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;
}
ПД: В моем списке есть команда pid, команда и указатель на следующий узел.
waitpid()
, и вы игнорируете информацию о статусе выхода. Если бы я отлаживал его, я бы собирал и печатал или регистрировал оба бита информации. - person Jonathan Leffler   schedule 07.12.2017