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