is SIGSEGV delivered to each thread?
c, linux, memory-management, signals
Solution
First of all
Signal dispositions are process-wide; all threads in a process share the same disposition for each signal. If one thread uses sigaction() to establish a handler for, say, SIGINT, then that handler may be invoked from any thread to which the SIGINT is delivered.
But read on
A signal may be directed to either the process as a whole or to a specific thread. A signal is thread-directed if
it is generated as the direct result of the execution of a specific hardware instruction within the context of the thread (`SIGBUS, SIGFPE, SIGILL, and SIGSEGV`)
I am quoting from `TLPI`.
Problem
I have a program in Linux which is multithreaded. There are certain memory areas in which I'm interested to see if they have been written within a certain time period. For that I give only read access to those memory pages and install a signal handler for SIGSEGV. Now my question is, will each thread call the signal handler for itself. Say Thread 1 writes to some forbidden memory area, will it be the one to execute the signal handler?