Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
volatile sig_atomic_t и больше ничего. Вот в этом FAQ очень хорошо написано что можно делать из обработчика сигналов, а что нет.When the processing of the abstract machine is interrupted by receipt of a signal, the values of objects which are neither
— of type volatile std::sig_atomic_t nor
— lock-free atomic objects (29.4)
are unspecified during the execution of the signal handler, and the value of any object not in either of these two categories that is modified by the handler becomes undefined
Но мы можем сами определить обработчики для интересующих нас сигналов. К примеру вот такой
void hdl(int sig) { std::string signal; if(sig == SIGUSR1) signal = "SIGUSR1";
# probe signal.send = _signal.send.*
# {
# sig=$sig
# sig_name = _signal_name($sig)
# sig_pid = task_pid(task)
# pid_name = task_execname(task)
# [...]
probe signal.send {
if (sig_name == "SIGKILL")
printf("%s was sent to %s (pid:%d) by %s uid:%d\n",
sig_name, pi
есть поток он блокируется на операции чтения
Представьте ситуацию: есть поток он блокируется на операции чтения. И мне нужно его уметь прервать в любой момент. В WIN это делается с помощью WaitForMultipleObject + Event. Аналог под Linux это только ppoll (pselect). Но приходиться работать с сигналами на уровне треда, что не очень то хорошо.

Практика работы с сигналами