信 (signal):
信 的基本概念:
信 是事件发生时对进程的通知机制,有时也叫,信 可以让一个正运行进程被另一个运行进程异步进程中断,转而处理某突发事件。
注意:信 的产生和处理都是由内核完成
简单说一下使内核为进程产生信 的事件有:
1 终端发特殊字符,如CTRL+C 对前台进程发送中断信
2 硬件发生异常,如被0除等异常机器语言指令。
3 系统状态变化:如alarm定时器到期引起SIGALRM信 ,进程某个子进程退出
4 运行kill 命令/函数。
信 使用的目的:
1.让进程知道发生了一件特定的事情。
2.强迫进程执行自己的信 处理程序。
特点:
简单,但不能携带大量的信息,满足特定条件才发送信 ,其优先级比较高。
命令:
在linux下用 查看信 列表 前31为常规信 ,后面的是实时信 。
信 列表:
linux下的信 专用名、定义值和默认反映
.c
发信 : ps -aux|grep a.out
例如:kill -2 进程id
简单的总结一下,我们通过 signal 函数注册一个信 处理函数,分别注册了两个信 (SIGIO 和
SIGUSER1);随后主程序就一直“长眠”了。 通过 kill 命令发送信 之前,我们需要先查看到接收者,通过 ps
命令查看了之前所写的程序的 PID,通过 kill 函数来发送。 对于已注册的信 ,使用 kill
发送都可以正常接收到,但是如果发送了未注册的信 ,则会使得应用程序终止进程。那么,已经可以设置信 处理函数了,信 的处理还有两种状态,分别是默认处理和忽略,这两种设置很简单,只需要将 handler 设置为SIG_IGN(忽略信 )或 SIG_DFL(默认动作)即可。
在此还有两个问题需要说明一下:
1.当执行一个程序时,所有信 的状态都是系统默认或者忽略状态的。除非是 调用exec进程忽略了某些信 。exec 函数将原先设置为要捕捉的信 都更改为默认动作,其他信 的状态则不会改变 。
2.当一个进程调动了 fork 函数,那么子进程会继承父进程的信 处理方式。
我们看到以上有三个demo,.c 是用signal来捕获信 ,,并做相应的处理,记住这是接收信 函数,发送的还是,我们可以在终端命令行用指令向.c发送信 ,.c 是执行忽略信 的处理,但记住上面说过的和是不能被忽略,捕捉的,只能执行默认动作
那么入门版的信 注册函数看完了,那么现在我们来看一下入门版的信 的发送函数:
.c
从代码中可以看出,向一个进程发送信 是用函数来发送,或者是用system来对进程发送信
信 注册函数高级版—-sigaction
函数原型:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!