LINUX.ORG.RU

sigset()


0

0

Описание этой функции в man:

If sigset() is used and disp is the address of a signal handler, the system adds sig to the calling process's signal mask before executing the signal handler; when the signal handler returns, the system restores the calling process's signal mask to its state prior to the delivery of the signal.

Вопрос в следующем: какая именно часть ядра системы меняет маску сигнала данной нити? Спасибо.

These functions are provided in glibc as a compatibility interface for programs that make use of the historical System V signal API. This API is obsolete: new applications should use the POSIX signal API (sigaction(2), sigprocmask(2), etc.)

bibi
()

PS: Если же мы говорим про потоки, то man pthread_sigmask

bibi
()

Вместо sigset() давно используется sigaction() - это отдельный вызов в ядре, который и меняет маску. Процесса причем, а не треда.

frey ★★
()
Ответ на: комментарий от frey

Насколько я понимаю, происходит следующее: работает моя программа, приходит прерывание (например Ctrl+c), диспетчер потоков вызывает функцию обработки, функция обработки заканчивается, делается return в мою программу. Как диспетчер потоков узнаёт о том, что нужно сменить маску сигнала обратно? Ведь return делается не в ядро, а в адресное пространство моей программы. Получается, что в адресном пространстве моей проги есть код, который не принадлежит моей проге (который и меняет маску обратно). «Чей» этот код? К чему он относится? Библиотеке, загрузчику, или чему-нибудь ещё? Спасибо.

SailorOtec
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.