Функция сна не влияет при работе с SIGCHLD

Какова связь между SIGCHLD обработка и sleep функционировать?

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>

sig_atomic_t child_exit_status;

void clean_up_child_process(int signal_number)
{
    int status;
    wait(&status);
    child_exit_status = status;
}

int main()
{
    struct sigaction sigchld_action;
    memset(&sigchld_action, 0, sizeof(sigchld_action));
    sigchld_action.sa_handler = &clean_up_child_process;
    sigaction(SIGCHLD, &sigchld_action, NULL);

    pid_t child_pid = fork();
    if (child_pid > 0) {
        printf("Parent process, normal execution\n");
        sleep(60);
        printf("After sleep\n");
    } else {
        printf("Child\n");
    }

    return 0;
}

Потому что, когда я выполняю код сверху, он печатает:

Parent process, normal execution
Child
After sleep

Но нет никакого эффекта от sleep функция в исполнении. Есть ли здесь какая-то особенность?

1 ответ

Из документации:

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Ноль, если запрошенное время истекло, или количество секунд, оставшихся до режима ожидания, если вызов был прерван обработчиком сигнала.

Что происходит, так это то, что функция сна прерывается обработчиком сигнала. Таким образом, проверка возвращаемого значения этого 60 виден. Можно использовать другую стратегию для сна оставшихся секунд, если это является намерением.

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