2

I have a multi-threaded application running on linux. In an event of a crash, say SIGSEGV, the handler is invoked. What will be the state of other threads in the process when the handler is executing? Will the threads be still running?

4

1 回答 1

3

SIGSEGV信号是同步信号。它被传递给导致无效内存访问的线程(并且仅传递给该线程,而不是整个进程)。

有关详细信息,请参见此处。以下是他链接文件的摘录:

可以为整个进程(例如,当使用 kill(2) 发送时)或为特定线程(例如,作为执行结果生成的某些信号,例如SIGSEGV和 SIGFPE)生成(并因此挂起)信号特定的机器语言指令是线程导向的,使用 pthread_kill(3) 的特定线程的信号也是如此。进程导向的信号可以被传递到当前没有阻塞信号的任何一个线程。如果多个线程的信号被解除阻塞,那么内核选择一个任意线程来传递信号。

于 2013-03-19T16:05:39.560 回答