windows 平台也是有信号处理接口的,而且与 unix 平台很相似。
void (__cdecl *signal(
int sig,
void (__cdecl *func ) (int [, int ] )))
(int);
不过支持的信号类型有限,只有下面这几种。
sig value | Description |
---|---|
SIGABRT | Abnormal termination |
SIGFPE | Floating-point error |
SIGILL | Illegal instruction |
SIGINT | CTRL+C signal |
SIGSEGV | Illegal storage access |
SIGTERM | Termination request |
windows信号处理函数是这一个新的 crt 线程执行的,该线程优先级较高,会先于普通线程被调度。
根据MSDN文档,SIGILL、SIGEGV、SIGTERM 在 NT 平台并不支持,但是可以通过 raise 接口触发。所以真正有用的只有SIGINT,也就是Ctrl + C,可以处理这个信号让进程正常退出。