我使用的并行线程库在Linux下创建线程和我对在此类应用中信号处理的两个问题。
我知道,信号处理程序是进程范围,这意味着如果我在过程中设置处理器的每个线程都会有这样的信号处理程序,我也知道有pthread_kill
用于将信号发送到特定线程功能。
我有关于使用例如壳发送信号问题kill
命令,据我理解,如果I型例如kill -INT PID
我将发送SIGINT
与此处理PID
,如果这是多线程程序的信号将被输送至在这个过程中的一个线程。
第一个问题,我不会有任何保证到这个信号将被传递线程的,我只能肯定,这将交付给一个线程没有信号屏蔽该信号?
如果是的话怎么样被交付给特定线程,比如“SIGFPE”,“SIGSEGV”,我是否会使用它们发送一些信号kill
shell命令,他们将被送到随机螺纹或将它们传递到创建其他线程的线程?
引用男人并行线程
POSIX.1区分的被引导到过程作为一个整体,信号被引导到各个线程的信号的概念。 根据POSIX.1,进程导向信号应通过过程中的一单一的,任意选择的线程来处理(使用kill(2)中,例如发送)。
有在的glibc 2.2及以上的天Linux的一些问题(Linux线程作为并行线程执行); 但是,因为Glibc 2.3-2.4有NPTL这是在POSIX一致性有关信号更准确。
我只能肯定,这将交付给一个线程没有信号屏蔽该信号?
如果您使用的杀 - 是的; 随机线程不挡住该信号。
如果是的话怎么样被交付给特定线程,就像“SIGFPE”,“SIGSEGV”几个信号,
它们被传递到特定的线程,只有当CPU /内核(在某些情况下通过特定指令)生成的; 不kill
与PID参数工具
如果我将使用kill shell命令给他们,他们将被送到随机螺纹或将它们传递到创建其他线程线程?
他们将被传递到过程的随机线程,杀死通常会发送进程范围的信号。 但是,如果信号是致命的,在进程中的所有线程将被销毁。
PS: http://www.linuxprogrammingblog.com/all-about-linux-signals?page=11