线程和信号

我在Linux下使用pthread库来创build线程,在这种应用程序中我有两个关于信号处理的问题。

我知道信号处理程序是整个进程,这意味着如果我在进程中设置处理程序,每个线程都会有这个信号处理程序,我也知道有pthread_kill函数发送信号到特定的线程。

我有一个关于使用例如shell kill命令发送信号的问题,据我所知,如果我input例如kill -INT PID我将发送SIGINT来处理这个PID ,如果这是multithreading程序,信号将被传递给在这个过程中的线程之一。

第一个问题,我不能保证这个信号将被传送到哪个线程,我只能确定它将在没有信号掩码的情况下被传送到一个线程。

如果是的话,传递给特定线程的less量信号如'SIGFPE','SIGSEGV',如果我将使用kill shell命令发送它们,它们将被传递到随机线程或将它们传递到创build其他线程的线程?

Solutions Collecting From Web of "线程和信号"

引用人pthreads

POSIX.1区分了针对整个过程的信号和针对单个线程的信号的概念。 根据POSIX.1,流程控制信号(例如,使用kill(2)发送)应由流程内的单个任意选择的线程处理。

在glibc 2.2及更早的版本中,Linux有一些问题(linuxthreads被用作pthread实现)。 但由于glibc 2.3-2.4在POSIX一致性信号中有更准确的NPTL。

我只能确定它会被传送到一个没有信号掩码的信号线程?

如果你正在使用杀 – 是的; 到不阻塞这个信号的随机线程。

如果是的话,那么传递给特定线程的少量信号如'SIGFPE','SIGSEGV',

只有在由CPU /内核(在某些情况下,通过特定指令)生成时,它们才被传递到特定的线程; 而不是通过PID参数kill实用程序

如果我将使用kill shell命令发送它们,它们将被传递给随机线程,或者将它们传递到创建其他线程的线程?

它们将被传递给进程的随机线程,kill通常会发送全进程信号。 但是如果信号是致命的,所有进程中的线程都将被破坏。

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