在头文件中<signal.h>,定义了linux中的信号。实际上,信号的定义在<bits/signum.h>中,该头文件包含在<signal.h>中。
信号是一种软中断,在我们的应用程序中,很多情况都会使用信号,去处理异常,异步等情况。
内核在信号来到时,做三个处理。
1.忽略该信号;信号SIGKILL,SIGSTOP是不能被忽略的,它们提供了像超级用户提供终止程序的方法
2.捕捉该信号;
3.执行系统默认动作;
信号太多,可以在书上网上,一个个去查找每个信号的作用,这里提及我们编写大型程序时会经常使用的几个信号。
SIGPIPE,如果在写到管道时读进程已经终止,则产生该信号,当类型为SOCK_STREAM的套接字不再连接时,进程写到该套接字产生该信号,所以我们在编写服务器端程序时,必须捕捉该信号,做相应的处理,或者忽略该信号,否则一旦客户端失去连接,程序就挂掉了。
SIGABRT,程序调用abort函数时推出
SIGHUP ,终端接口接收该信号,发送给该终端相关的会话首进程,仅当终端的CLOCAL标志(没搞过这个)没有时,产生此信号。而我们捕捉该信号最主要的用途,就是通过发送这个信号,通知守护进程,让程序重新读取配置文件。
SIGINT,用户中断,发送到终端的前台进程组的每个进程,终止程序
SIGQUIT,终止前台所有进程,产生core文件
SIGSEGV ,段错误,
通常在我们的程序运行时,特别是服务器端程序被终止时,用户数据并没有得到保存,所以我们必须捕捉这些中断程序执行的信号,在捕捉到这些信号时,对用户数据做一次停机前保存,当然如果是硬中断,这个我就没搞过了。