Функция сна не влияет при работе с 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
виден. Можно использовать другую стратегию для сна оставшихся секунд, если это является намерением.