windows 平台的信号处理

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,可以处理这个信号让进程正常退出。

 

你可能感兴趣的:(Windows)