我有一个在linux上运行的多线程应用程序。如果发生崩溃,比如SIGSEGV,则调用处理程序。处理程序执行时进程中其他线程的状态是什么?线程是否仍在运行?
答案 0 :(得分:3)
SIGSEGV
信号是同步信号。它被传递给导致无效内存访问的线程(并且只传递给那个线程,而不是整个进程)。
有关详细信息,请参阅here。以下是他链接文件的摘录:
可以为整个过程生成(并因此等待)信号(例如,当使用kill(2)发送时)或用于特定线程(例如,某些信号,例如由于执行特定的机器语言指令而生成的 SIGSEGV 和SIGFPE是线程定向的,使用pthread_kill(3)针对特定线程的信号也是如此。可以将过程引导的信号传递到当前没有阻塞信号的任何一个线程。如果多个线程的信号未被阻塞,则内核会选择一个任意线程来传递信号。