理论教育 Linux操作系统:软中断通信实践

Linux操作系统:软中断通信实践

时间:2023-11-25 理论教育 版权反馈
【摘要】:接收进程在收到软中断信号后, 按规定执行一个事先关联的处理程序。在使用软中断进行通信时, 收发双方的工作如下。不预置则无法接收到发过来的软中断信息。查系统的软中断信号表可知, 需要定义的软中断信号序号为2, 名称为SIGINT。

Linux操作系统:软中断通信实践

进程通信的另一种形式是信号, 其侧重在功能处理而不是大量数据的传送。

软中断是对硬件中断的一种模拟, 发送软中断就是向接收进程发送一个信号。 接收进程在收到软中断信号后, 按规定执行一个事先关联的处理程序。 需要注意软中断处理程序不像硬中断处理程序那样, 收到中断信号后就被启动, 它必须等接收进程执行时才生效。另外, 进程也可向自身发送软中断信号, 以便在某些特殊情况下, 进程能转入规定的处理程序。

在使用软中断进行通信时, 收发双方的工作如下。

1. 信号接收方进程对软中断信号预置处理程序

软中断信号预置函数:

sig: 系统给定的软中断信号中的序号或名称。

function: 与软中断信号关联的函数名, 当进程在运行过程中捕捉到指定的软中断信号后, 中断当前程序的执行转到该函数执行。

注意: 软中断信号必须提前预置, 然后才可以在程序运行中捕获信号并转入处理函数。 不预置则无法接收到发过来的软中断信息。

2. 发送信号的进程向指定进程发送某种类型的软中断信号

发送软中断信号的函数:

向进程标识符pid 指定的进程发软中断信号sig。

pid: 表示一个或一组进程的标识符:

当pid>0 时, 将信号发送给指定pid 的进程;

当pid=0 时, 将信号发送给同组的所有进程;

当pid=-1 时, 将信号发送给以下所有满足条件的进程: 该进程用户标识符等于发送进程有效用户标识符。

sig: 软中断信号的序号或名称。(www.daowen.com)

3. 常用信号功能

常见信号的触发动作和信号功能说明如下。

(1) SIGINT: 终止进程, 通常我们按Ctrl+C 就发送这个信号。

(2) SIGQUIT: 和SIGINT 类似, 由QUIT 字符(Ctrl- \ )来控制, 进程收到该信号退出并产生core 文件。

(3) SIGKILL: 消息编号为9, 常用命令发送“kill -9 进程号”, 进程收到这个信号会被立即终止。

(4) SIGTERM: 不带参数的kill 命令默认发送该信号, 用于杀死进程。 该信号较友好, 某些情况下, 假如进程不能中断, 可以忽略SIGTERM 信号。 因为SIGTERM 可被阻塞, 所以进程不能被结束时, 可用kill 发送SIGKILL 强行结束。

可通过命令man 7 signal 查看信号的帮助说明。

【例5-25】 有一循环输出字符串“Hello”的程序, 利用键盘Ctrl+C 或kill 发信号终止该程序。 程序执行时捕获信号会输出已接收, 输出OK 后结束。

查系统的软中断信号表可知, 需要定义的软中断信号序号为2, 名称为SIGINT。

本程序在其对应的软中断处理函数中修改循环变量的值, 通过该方式终止循环的执行。

其执行结果如下。

执行该程序, 开始循环输出Hello。

在当前执行窗口按下Ctrl+C, SIGINT 信号被捕捉后该循环结束。

或者在另一个控制台查询其进程号, 利用kill 向其发送信号, 信号捕捉后执行效果相同。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈