C - вывод статуса выхода дочернего элемента
Я пишу некоторый код, который отслеживает выход или сигнальное значение вызова exec, который был сделан в дочернем элементе. У меня есть несколько дочерних элементов, для которых я сохранил PID в массиве структуры в дочернем элементе ChildInfo. Эта функция вызывается в моем основном цикле и в основном вызывается, когда пользователь вводит строку: «отчет о дочерних элементах». Когда это введено, он должен сообщить, было ли завершено задание, было ли сигнализировано или оно все еще выполняется. Это работает, когда я один раз ввожу «отчет о дочерних элементах», вывод:
но как только я снова ввожу «отчет о детях», он ничего не печатает, я получаю вывод:
Однако, когда я создаю новую работу, например, job4, а затем запускаю отчет, он сообщает только о статусе job4. Как мне распечатать статус (выход, сигнал, выполнение) заданий каждый раз, когда я отправляю «отчет о дочерних элементах»?
void get_exit_status(ChildInfo child, JobInfo jobCalled, CommandInfo *userEntry,
JobStatus jobStatus) {
int status;
int *cpid = child.childPid;
char **reportCmd = jobCalled.reportCmd;
// wait for all children
printf("[Job] cmd:status\n");
if (!userEntry->secArg) {
for (int i = 0; i <= jobCalled.jobId; i++) {
if (waitpid(cpid[i], &status, WNOHANG) < 0) {
continue;
}
if (WIFEXITED(status)) {
printf("[%d] %s:exited(%d)\n", i, reportCmd[i],
WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
printf("[%d] %s:signalled(%d)\n", i, reportCmd[i],
WTERMSIG(status));
} else {
printf("[%d] %s:running\n", i, reportCmd[i]);
}
}
}
}