3、按照系统默认的方式处理,大部分信号的默认处理方式是终止进程
四.linux下的信号
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
五.简单实例
1.单信号处理
#include"stdio.h"
#include"signal.h"
void SignalHandler(int iSignNum)
{
printf("capture signal number:%d\n",iSignNum);
}
int main()
{ // 程序运行Ctrl+c将不能终止,因为“Ctrl+c”产生的信号SIGINT
//将交给已经注册的自定义函数处理,“Ctrl+\”终止是因为它产生的SIGQUIT尚未在程序中注册
signal(SIGINT,SignalHandler);
while(1)
sleep(1);
return 0;
}
2.多信号处理
#include"signal.h"
#include"sys/types.h"
#include"unistd.h"
void SigRoutine(int iSignNum)
{
switch(iSignNum)
{
case 1:
printf("capture SIGHUP signal, signal number is %d\n",iSignNum);
break;
case 2:
printf("capture SIGINT signal, signal number is %d\n",iSignNum);
break;
case 3:
printf("capture SIGINT signal, signal number is %d\n",iSignNum);
break;
}
}
int main()
{
printf("process ID is %d\n",getpid());
if(signal(SIGHUP,SigRoutine) == SIG_ERR)
{
printf("coundn't register signal handler for SIGHUP");
}
if(signal(SIGINT,SigRoutine) == SIG_ERR)
{
printf("coundn't register signal handler for SIGINT");
}
if(signal(SIGQUIT,SigRoutine) == SIG_ERR)
{
printf("coundn't register signal handler for SIGQUIT");
}
while(1)
sleep(1);
return 0;
}
3.alarm
#include"stdio.h"
#include"signal.h"
#include"sys/types.h"
#include"unistd.h"
void Handler()
{
printf("signal handler ..\n");
}
int main()
{
int i;
signal(SIGALRM,Handler);
// alarm专门为SIGALRM信号而设,使系统在一定时间后发送信号
alarm(5);
for(i=1;i<=10;i++)
{
sleep(1);
printf("sleep %ds\n",i);
}
return 0;
}
4.pause
#include"stdio.h"
#include"signal.h"
#include"sys/types.h"
#include"unistd.h"
void SigHandler(int iSignNum)
{
printf("signal:%d\n",iSignNum);
}
int main()
{
signal(SIGALRM,SigHandler);
alarm(5);
printf("before pause \n");
pause();
printf("after pause \n");
return 0;
}