Существует демон, который имеет два потока: th1, th2.th2 читает сокет, используя read(2)
.
Если я убиваю демона с помощью SIGTERM
, th1 ловит и обрабатывает сигнал (устанавливает флаг завершения), после чего вызывается деструктор демона, он вызывает pthread_kill(th2, SIGTERM)
.Однако второй поток не получает SIGTERM
, поэтому он не уничтожается (когда сокет получает данные и выходит из read()
, он завершает выполнение, так как установлен флаг завершения).
Если я позвоню pthread_kill(th2, SIGUSR2)
, а затем pthread_kill(th2, SIGTERM)
, все закончится правильно.Таким образом, кажется, что UNIX не позволяет посылать идентичные сигналы последовательно.
Зависит ли это поведение от операционной системы?Можем ли мы гарантировать, что указанный поток получает SIGTERM
из другого потока?