Obsługa sygnału w procesie wielowątkowym

0

Niebawem mam kolokwium z systemów operacyjnych i chciałbym się dowiedzieć, jaka jest odpowiedź na poniższe:

W jakim kontekście wykonuje się obsługa sygnału w procesie wielowątkowym?

Odpowiedziałbym po prostu, że w kontekście wątku, do którego trafi sygnał - ale raz, że nie jestem pewien tej odpowiedzi, a dwa, fajnie by było przeczytać parę zdań więcej na ten temat, dopiero stawiam pierwsze kroczki w wątkach.

0

Zdefiniuj jaki system i o jaki sygnał chodzi?

Standard C++ mówi coś takiego:

A signal handler that is executed as a result of a call to the raise function belongs to the same thread of execution as the call to the raise function. Otherwise it is unspecified which thread of execution contains
a signal handler invocation.

Czyli niespecjalnie da się podać konkrety w ogólnym przypadku. Chyba, że chodzi o kontekst jądra/użytkownika, to wtedy odpowiedzą jest kontekst użytkownika.

0
kalwi napisał(a):

Niebawem mam kolokwium z systemów operacyjnych i chciałbym się dowiedzieć, jaka jest odpowiedź na poniższe:

W jakim kontekście wykonuje się obsługa sygnału w procesie wielowątkowym?

Odpowiedziałbym po prostu, że w kontekście wątku, do którego trafi sygnał - ale raz, że nie jestem pewien tej odpowiedzi, a dwa, fajnie by było przeczytać parę zdań więcej na ten temat, dopiero stawiam pierwsze kroczki w wątkach.

Na linuxie to będzie dowolny wątek procesu. Ale to może się zmienić np z powodu sigmask, tj zamaskowania niektórych sygnałów dla wątku.

http://www.linuxprogrammingblog.com/all-about-linux-signals?page=11

http://man7.org/linux/man-pages/man3/pthread_sigmask.3.html
http://man7.org/linux/man-pages/man2/sigaltstack.2.html

Poza tym kod w kernelu :
http://lxr.free-electrons.com/source/kernel/signal.c#L876

1 użytkowników online, w tym zalogowanych: 0, gości: 1