![SIGALRM 和 SIGVTALRM 有什么区别?](https://linux22.com/image/173683/SIGALRM%20%E5%92%8C%20SIGVTALRM%20%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
我确实明白两者都是用来根据经过的时间发出信号......但是有什么区别呢?
就我而言,我想针对特定线程时间发出这样的信号,如果进程被挂起或不存在,时间计数器就会被挂起(例如,如果杀死然后通过 criu 恢复,则可能会发生这种情况)。
答案1
根据维基百科https://en.wikipedia.org/wiki/Signal_(IPC)SIGVTALRM 在之后发送中央处理器时间该过程的时间(即“工作时间”)已经过去。相反,SIGALRM 计算的是秒表测量的实时时间:
当调用前面的警报设置函数(例如 setitimer)中指定的时间限制过去时,SIGALRM、SIGVTALRM 和 SIGPROF 信号被发送到进程。当实际时间或时钟时间过去时发送 SIGALRM。当进程使用的 CPU 时间耗尽时,会发送 SIGVTALRM。当进程和代表进程的系统使用的 CPU 时间耗尽时,将发送 SIGPROF。