#include<signal.h>
#include <unistd.h>
#include<stdio.h>
int interrupt()
{
printf("Interrupt called \n");
sleep(3);
printf("Interrupt Func Ended.\n");
}
main()
{
signal(SIGINT, interrupt);
printf("Interrupt set for SIGINT");
sleep(10);
printf("Program NORMAL ended.\n");
return;
}
执行结果为:
Interrupt set for SINGINT
<ctrl+c>
Interrupt called
<ctrl+c>
Func Ended
Interrupt called
Func Ended
Program NORMAL ended.
如果在信号处理函数执行时进程收到了其它类型的信号,该函数的执行就会被中断:
#include<signal.h>
#include <unistd.h>
#include<stdio.h>
int interrupt()
{
printf("Interrupt called \n");
sleep(3);
printf("Interrupt Func Ended.\n");
}
int catchquit()
{
printf("Quit called\n");
sleep(3);
printf("Quit ended.\n");
}
main()
{
signal(SIGINT, interrupt);
signal(SIGQUIT, catchquit);
printf("Interrupt set for SIGINT");
sleep(10);
printf("Program NORMAL ended.\n");
return;
}
执行结果为:
Interrupt set for SIGINT
<ctrl+c>
Interrupt called
<ctrl+\>
Quit called.
Quit ended.
Interrupt Func Ended.
Program NORMAL ended.