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;
}