什么是信号
信号又称软中断信号,是进程之间传递信息的一种方式,信号传递过程中不仅可以传递信息,还可以附加传递一些数据信息或其他内容.
信号的分类
信号按照可靠性可分为,可靠信号和不可靠信号
不可靠信号:信号传递过程中有可能丢失的信号为不可靠信号,在操作系统早期发展过程中,UNIX的信号都是不可靠信号,在后期发展过程中,Linux在不可靠信号的基础上发展出了可靠信号,但因版本兼容问题,不可靠信号也在一直沿用.
可靠信号:信号传输过程中不会丢失的信号.
信号按照时间关系还可分为实时信号和非实时信号
实时信号和非实时信号的区别同样是是否支持排列,简单来说,所有的可靠信号都是实时信号,所有的不可靠信号都是非实时信号.
信号查看及用法
在Linux命令行可以用kill -l列出当前版本操作系统注册的信号,不同版本的操作系统可能会列出不同的信号.
在程序中如何给指定进程发送信号
- int kill(pid_t pid,int sig);通过kill函数给指定进程发送特定信号,kill函数第一个参数为指定进程的pid,若第一个参数为0时,则表示给当前进程进程组所有进程发送信号,当pid为-1时,则表示给当前进程用户有权限的除1号进程外所有进程发送信号.第二个参数为要发送的信号.
- int raise(int sig);通过raise函数给当前进程发送一个sig信号.
在程序中如何指定信号的处理方式
在信号抵达时,操作系统提供了三种解决方式,第一种为默认按操作系统默认解决方案解决,第二种是屏蔽信号,不进行处理,第三种是用户自己指定解决方案.
- void(*signal(int sig,void (*handler)(int)))(int);
给sig信号指定一个解决方案,第一个参数为信号常量,第二个参数为一个函数指针,指向要修改信号的解决方案