Я использую библиотеку pthread под Linux для создания потоков, и у меня есть два вопроса об обработке сигналов в таких приложениях.
Я знаю, что обработчики сигналов распространяются на весь процесс, а это значит, что если я установлю обработчик в процессе, каждый поток будет иметь этот обработчик сигнала, также я знаю, что существует функция pthread_kill
для отправки сигналов в определенные потоки. .
У меня вопрос по отправке сигналов с помощью например команды shell kill
, насколько я понимаю, если я наберу например kill -INT PID
я отправлю SIGINT
для обработки с этим PID
. Если это многопоточная программа, сигнал будет доставлен в один из потоков этого процесса.
Первый вопрос, у меня нет никакой гарантии, в какой из потоков будет доставлен этот сигнал, я могу быть уверен только в том, что он будет доставлен в один поток без этого сигнала в маске сигнала?
Если да, то как насчет нескольких сигналов, которые доставляются в конкретный поток, таких как «SIGFPE», «SIGSEGV», если я отправлю их с помощью команды оболочки kill
, они будут доставлены в случайный поток или будут быть доставлено в поток, создавший другие потоки?