1、信号是一种异步通信机制(和单片机里面的中断很像)
2、信号的目的:用来通信
3、信号的本质是int 型的数字编号,在/usr/include/i386-linux-gnu/bits/signum.h被宏定义(ubuntu系统)
4、常见的信号介绍
(1)SIGINT 2 Ctrl+C是OS送给前台进程组的每一个进程
(2)SIGABRT 6 调用abort函数,进程异常终止
(3)SIGPOLL 8 指示一个异步IO
(4)SIGKILL 9 杀死进程的终极办法
(5)SIGSEGV 11 无效存储访问时OS发出该信号
(6)SIGPIPE 13 涉及管道和socket
(7)SIGALRM 14 涉及alarm函数的实现
(8)SIGTERM 15 kill命令发送的OS默认终止信号
(9)SIGCHLD 17 子进程终止或停止时OS向其父进程发此信号
5、写了一个示例代码
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void func_alarm(int sig)
{
if(sig != SIGALRM)
{
return;
}
printf("alarm happened\n");
}
int main(void)
{
int ret = -1;
// signal(SIGALRM,func_alarm); //signal的用法
struct sigaction *act;
act->sa_handler = func_alarm; //c语言中结构指针和结构体成员名用->
sigaction(SIGALRM,act,NULL); //查man手册
ret = alarm(5);
printf("1st alarm ret = %d\n",ret);//ret = 0 表示alarm成功
sleep(3);
ret = alarm(5);
printf("2st alarm ret = %d\n",ret);//ret = 2 表示alarm距离上次警报剩2s
sleep(2);
ret = alarm(0);
printf("3st alarm ret = %d\n",ret);//ret = 3 同上,alarm(0)取消警报
while(1);
return 0;
}