SIGALRM 和 SIGVTALRM 有什么区别?

SIGALRM 和 SIGVTALRM 有什么区别?

我确实明白两者都是用来根据经过的时间发出信号......但是有什么区别呢?

就我而言,我想针对特定线程时间发出这样的信号,如果进程被挂起或不存在,时间计数器就会被挂起(例如,如果杀死然后通过 criu 恢复,则可能会发生这种情况)。

答案1

根据维基百科https://en.wikipedia.org/wiki/Signal_(IPC)SIGVTALRM 在之后发送中央处理器时间该过程的时间(即“工作时间”)已经过去。相反,SIGALRM 计算的是秒表测量的实时时间:

当调用前面的警报设置函数(例如 setitimer)中指定的时间限制过去时,SIGALRM、SIGVTALRM 和 SIGPROF 信号被发送到进程。当实际时间或时钟时间过去时发送 SIGALRM。当进程使用的 CPU 时间耗尽时,会发送 SIGVTALRM。当进程和代表进程的系统使用的 CPU 时间耗尽时,将发送 SIGPROF。

相关内容