1.在系统中什么是信号,都有什么信号
2.在系统接收到信号后,他是如何处理的
3.信号作用
信号处理流程:
_system_call:
call _sys_call_table(,%eax,4)
sys_signal
sys_signal
int sys_signal(int signum, long handler, long restorer)
{
    //分配一个信号结构体
	struct sigaction tmp;
    //确定信号的范围
	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;
}do_signal函数
void do_signal(long signr,long eax, long ebx, long ecx, long edx,
	long fs, long es, long ds,
	long eip, long cs, long eflags,
	unsigned long * esp, long ss)
{
	unsigned long sa_handler;
	long old_eip=eip;
	struct sigaction * sa = current->sigaction + signr - 1;
	int longs;
	unsigned long * tmp_esp;
	sa_handler = (unsigned long) sa->sa_handler;
	/*
		mark #define SIG_DFL		((void (*)(int))0)	default signal handling 
		mark #define SIG_IGN		((void (*)(int))1)	ignore signal
	*/
	if (sa_handler==1)
		return;
	if (!sa_handler) {
		if (signr==SIGCHLD)
			return;
		else
			do_exit(1<<(signr-1));
	}
	if (sa->sa_flags & SA_ONESHOT)
		sa->sa_handler = NULL;
	*(&eip) = sa_handler;
	longs = (sa->sa_flags & SA_NOMASK)?7:8;
	*(&esp) -= longs;
	verify_area(esp,longs*4);
	tmp_esp=esp;
	put_fs_long((long) sa->sa_restorer,tmp_esp++);
	put_fs_long(signr,tmp_esp++);
	if (!(sa->sa_flags & SA_NOMASK))
		put_fs_long(current->blocked,tmp_esp++);
	put_fs_long(eax,tmp_esp++);
	put_fs_long(ecx,tmp_esp++);
	put_fs_long(edx,tmp_esp++);
	put_fs_long(eflags,tmp_esp++);
	put_fs_long(old_eip,tmp_esp++);
	current->blocked |= sa->sa_mask;
}主要作用:



















![[Day1]工业网络智能控制:三层交换机与防火墙](https://img-blog.csdnimg.cn/img_convert/7482eb57b05ccf14403e8074fea76b9d.jpeg)
