Я знаю немного соляриса. Так что я использую это для деталей. LWP == Solaris для "потока", как в pthreads.
сигналы прерывания, такие как SIGILL, доставляются в поток, вызвавший прерывание. Асинхронные сигналы доставляются в первый активный поток (LWP) или процесс, который не блокирует этот сигнал. Модуль ядра aslwp () обходит таблицу заголовков процесса (имеет связанные LWP), ища первого вероятного кандидата для получения асинхронного сигнала.
В ядре находится стек сигналов. Я не уверен, что / как ответить на ваш вопрос стека сигналов.
Один процесс может иметь несколько ожидающих сигналов. Это то, что вы имеете в виду?
Каждый сигнал, предназначенный для процесса, удерживается там до тех пор, пока процесс не переключит контекст (или не будет принудительно) в активное состояние. Это отчасти потому, что вы, как правило, не можете подвергнуться ловушке, когда контекст процесса был заменен, а процесс ничего не делает в процессе обработки. Вы, конечно, можете подвергаться асинхронным сигналам. Но процесс не может «делать что-либо» с любым сигналом, если он не может работать. Итак, в этот момент ядро переключает контекст обратно на активный, и сигнал доставляется через aslwp ().
Сигналы в реальном времени ведут себя по-разному, и я позволю этому остаться с этим.
Попробуйте прочитать это:
developers.sun.com/solaris/articles/signalprimer.html