宝安电子厂做网站一站式媒体发稿平台
作者:GWD 时间:2019.7.31
一、系统信号signal sigaction
1.在系统中什么是信号,都有什么信号
2.在系统接收到信号后,他是如何处理的
3.信号作用
4、信号中断也是一种系统调用,在system_call中,do_signal.c这个才是关键
二、do_signal.c分析
1、信号是怎么被执行的
2、信号是进程间通信的简单的消息,信号虽然不带任何信息。但是子进程结束后他会产生一个17信号给父进程,显示子进程当前的状态。信号处理函数会被压入用户堆栈。
三、信号处理流程:
system_call:call sys_call_table(,%eax,4)sys_signal //做了信号的预处理与设置sys_signal设置分配一个信号结构体struct sigaction tmp;检索信号范围要在1-32并且不是终止信号 if (signum<1 || signum>32 || signum==SIGKILL)return -1;指定信号处理句柄tmp.sa_handler = (void (*)(int)) handler;设置屏蔽码tmp.sa_mask = 0;设置改信号的状态为只可执行一次就恢复到默认值 tmp.sa_flags = SA_ONESHOT | SA_NOMASK;保存回复处理程序指针tmp.sa_restorer = (void (*)(void)) restorer;更新当先标识指针的信号信息handler = (long) current->sigaction[signum-1].sa_handler;
current->sigaction[signum-1] = tmp;return handler;