信号,这在生活中是非常常见的,比如说红绿灯、手机铃声等。所谓信号就是在人或事情感受到这个元素产生以后会做出相应的处理动作,这就是信号。而在我们Linux下,什么是信号呢?
信号的基本概念:
1.定义:信号更多的是通知事件的发生。信号产生之后第一时间也不是直接处理而是先存储下来。
信号实际是一个软中断。【软中断是一种需要内核为正在运行的进程去做一些事情(通常为I/O)的请求。】
2.流程:信号的产生--->信号的注册--->信号的阻塞(不处理)--->信号的注销--->信号的处理。
3.分类:①不可靠信号(非实时信号):1~31
②可靠信号(实时信号):34~64
Linux下有62种信号,使用kill -l 命令查看
信号的产生:
在Linux终端下,我们常常在键盘上输入ctrl+c来终止某个进程(这个按键只能用于终止前台进程,如果运行进程之前加上&那么这个进程就会到后台运行,此时ctrl+c就没效果了)。实际上,在用户按下Ctrl-C的时候,由操作系统向进程发送SIGINT信号,然后该进程对这个信号进行了响应,进而进程终止。其实我们在谈到进程状态的时候,其中谈到kill -9这个操作,这个操作实质也是一种信号。
信号的产生一般有三种:
1.通过硬件中断产生:ctrl+c
2.程序异常产生: SIGFPE 、SIGSEGV ...
3..软件条件产生: ① kill : int kill(pid_t pid ,int sig):向指定的进程发送指定的信号。成功返回0,失败返回-1
② raise: int raise(int sig):向自身发送信号。成功返回0,失败返回-1
③ abort: void abort(void):向自身发送SIGABRT信号。这个信号如同exit函数一样,永远成功没有返回 值。它可以使当前进程接收到异常信号而终止
④ alarm: unsigned int alarm(unsigned int seconds):
设置一个定时器,在n秒之后