我发现在HPUX上,SIGALRM信号可以由系统创建,并由进程在单个线程应用程序中正确捕获。但是,如果我在一个线程中设置SIGALRM,SIGALRM将不再发生。 为什么?此问题仅发生在HPUX平台上,但在其他UNIX平台(solaris sparc,x86,Linux,AIX,Mac和Ubantu)上运行良好
请帮帮我!谢谢!
答案 0 :(得分:-1)
Multithreaded Environments中的信号处理:作为信号处理程序:对于所有UNIX平台,信号处理程序都是基于每个进程安装的。在多线程环境中,进程中的每个信号只有一个信号处理程序。为任何线程安装的最后一个信号处理程序对进程中的所有线程都有效。信号传递时会调用处理程序。
同样,SIGALRM
是由接收它们的进程控制之外的事件生成的异步信号,并且在不可预测的时间到达。当异步信号被传递到进程而不是线程而不考虑正在执行的指令。这就是为什么SIGALRM
不能在HPUX
上的帖子中发生。
这是在HP-UX调度策略中;有Signal Processing Notes of HP-UX。