信号:一种软中断
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler)
在调用进程中设置信号的处理方式
signum:信号
handler:信号处理方式 SIG_IGN(忽略),SIG_DFL(默认) 自定义函数
返回值:成功= 失败=SIG_ERR 返回该信号上次处理函数
kill -l 查看信号编号
-
#include "../apue.h"
-
sighandler_t ret;
-
void sig_fun1(int signum)
-
{
-
printf("[%d]%s\n", getpid(), __FUNCTION__);
-
ret=signal(SIGALRM, ret);
-
printf("[%s]ret=0x%x\n",__FUNCTION__,ret);
-
return;
-
}
-
void sig_fun2(int signum)
-
{
-
printf("[%d]%s\n", getpid(), __FUNCTION__);
-
ret=signal(SIGALRM, ret);
-
printf("[%s]ret=0x%x\n",__FUNCTION__,ret);
-
return;
-
}
-
int main()
-
{
-
int i;
-
-
printf("[%s]pid=%d fun1=%p fun2=%p\n",
-
__FUNCTION__, getpid(), sig_fun1, sig_fun2);//打印该执行函数名,进程id, sig_fun1、sig_fun2的函数地址
-
-
for(i=0; i<5; i++)
-
{
-
printf("wait...%d\n", i+1);
-
sleep(2);
-
}
-
-
ret=signal(SIGALRM, sig_fun1);//设置SIGALRM 信号, 信号处理函数sig_fun1
-
printf("ret=0x%x\n",ret);
-
-
for(; i<10; i++)
-
{
-
printf("wait...%d\n", i+1);
-
sleep(2);
-
}
-
-
ret=signal(SIGALRM, sig_fun2);
-
printf("ret=0x%x\n",ret);
-
-
while(1)
-
{
-
;
-
}
-
-
return 0;
-
}
执行结果如下:
[root@bogon 04_signal]# ./exe
[main]pid=3195 fun1=0x8048454 fun2=0x80484b4
wait...1
wait...2
wait...3
wait...4
wait...5
ret=0x0
wait...6
wait...7
wait...8
wait...9
wait...10
ret=0x8048454
[3195]sig_fun2
[sig_fun2]ret=0x80484b4
示例1
我们在设置 把sig_fun2 设置Alarm 信号 的处理函数 后 ,执行
[root@bogon 04_signal]# kill -14 3195
[root@bogon 04_signal]#
示例2
此处是向 进程id 3195 发送 Alarm 信号就会执行 sig_fun2函数,出现示例1
阅读(1580) | 评论(0) | 转发(0) |