Я хочу напечатать номер в журнале или на терминале, используя write
(или любую асинхронную функцию) внутри обработчика сигнала. Я бы предпочел не использовать буферизованный ввод-вывод.
Есть ли простой и рекомендуемый способ сделать это?
Например, вместо printf
ниже я бы предпочел write
(или любую функцию asyn safe).
void signal_handler(int sig)
{
pid_t pid;
int stat;
int old_errno = errno;
while((pid = waitpid(-1, &stat, WNOHANG)) > 0)
printf("child %d terminated\n", pid);
errno = old_errno;
return;
}
Печатать строки легко. Вместо printf
выше я могу использовать (без печати pid
):
write(STDOUT_FILENO, "child terminated", 16);