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]);
            }
        }
    }
}

0 ответов

Другие вопросы по тегам