版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、进程软中断通信【预备知识】进程软中断通信涉及的系统调用描述如下。1kill()进程用kill()向一个进程或一组进程发送一个信号。系统调用格式为int kill(pid,sig)。其中,pid是一个或一组进程的标识符,sig是要发送的软中断信号。信号的发送分如下三种情况。pid0时,核心将信号发送给进程pid。pid=0时,核心将信号发送给与发送进程同组的所用进程。pid=-1时,核心将信号发送给所有用户标识符真正等于发送进程的有效用户标识号的进程。2.signal(sig,function)接收信号的程序用signal()来实现对处理方式的预置,允许调用进程控制软中断信号。系统调用格式为si
2、gnal(sig function),此时需包含头文件signal.h。其中,sig用于指定信号的类型,sig为0则表示没有收到任何信号,其余类型如表所示。调用函数使用如下头文件:#include参数定义如下:signal (sig,function)int sig;void(*func) (); function是该进程中的一个函数地址,在核心返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGKILL、SIGTRAP和SIGPWR以外的信号,核心自动重新设置软中断信号处理程序的值为SIG_DFL,进程不能捕获SIGKILL信号。function的解释如下:(1)funct
3、ion=1时,进程对sig类信号不做任何处理便立即返回,亦即屏蔽该类型号。(2)function=0时,默认值,进程收到sig信号后终止自己。(3)function为非0、非1类整数时,执行用户设置的软中断处理程序。信号的类型值名字说明01SIGHUP挂起(hangup)02SIGINT中断,当用户从键盘按“c”键或“break”键时03SIGQUIT退出,当用户从键盘按“quit“键时04SIGILL非法指令05SIGTRAP跟踪陷阱(trace trap)06SIGIOTIOT指令07SIGEMTEMT指令08SIGFPE浮点运算溢出09SIGKILL终止进程10SIGBUS总线错误11S
4、IGSEGV段违例,进程试图去访问其虚地址空间以外的位置12SIGSYS系统调用中参数错,如系统调用号非法13SIGPIPE向某个非读管道中写入数据14SIGALRM闹钟。当进程希望在某时间后接收信号时发此信号15SIGTERM软件终止(software termination)16SIGUSR1用户自定义信号117SIGUSR2用户自定义信号218SIGCLD某个子进程死19SIGPWR电源故障编程实现例【任务】编程实现,父进程生成子进程,父进程发送信号并等待,子进程接收信号并完成某种功能,然后自我终止并唤醒父进程。【程序】#include #include #include int fun
5、c();main() int i,j;signal(17,func);if(i=fork() printf(“Parent: Signal 17 will be send t to Child! n ”)kill(i,17);wait(0);printf (“Parent: finished! n”);elsesleep(10);printf(“Child: A signal from my Parent is received ! n”);exit();func()printf(“It is signal 17 processing function ! n”)【运行结果】【分析】编程实现例
6、【任务】编制一程,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即DEL键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止。child process 1 is killed by parent!child process 2 is killed by parent!父进程等待两个子进程终止后,输出以下信息后终止。Parent process is killed!【程序】#include #include #include int waiting(),stop();int
7、wait_mark;main() int p1,p2;while (p1=fork()=-1);if (p10) while (p2=fork()=-1); if (p20) printf(“parentn”); wait_mark=1; signal(SIGINT,stop); /*接收DEL信号,并转stop()*/ waiting(); kill(p1,16); /*向P1发中断信号16*/ kill(p2,17); /*向P2发中断信号17*/ wait(0); wait(0); printf(“parent process is killed!n”); exit(0) else pr
8、intf(“p2n”); wait_mark=1; signal(17,stop) waiting(); lockf(stdout,1,0); printf(“child process 2 is killed by parent!n”); lockf(stdout,0,0); exit(0); else printf(“p1n”); wait_mark=1; signal(16,stop) waiting(); lockf(stdout,1,0); printf(“child process 1 is killed by parent!n”); lockf(stdout,0,0); exit
9、(0); void waiting() while (wait_mark!=0); void stop()Wait_mark=0;【运行结果】child process 1 is killed by parent!child process 2 is killed by parent!Parent process is killed!【分析】使用系统调用signal()都放在一段程序的前面部分,而不是在其他接收信号处。这是因为signal()的执行只是为进程指定信号量16或17的作用,以及分配相应的stop()过程连接的指针,从而,signal()函数必须在程序前面部分执行。编程实现例【任务】
10、在上面程序中,增加语句signal(SIGINT,SIG_IGN)、signal(SIGQUIT,SIG_IGN),观察执行结果,并分析原因。【程序】#include #include #include int pid1,pid2;int endflag=0,pf1=0,pf2=0;void intdelete() kill(pid1,16); kill(pid2,17); endflag=1;void int1() printf(“child process 1 is killed by parent!n”);exit(0);void int2() printf(“child process
11、 2 is killed by parent!n”);exit(0);main() int exitpid;signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN);while (pid1=fork()=-1);if (pid1=0) printf(“p1n”); signal(SIGUSER1,int1); signal(16,SIG_IGT) pause(); exit(0); elsewhile (pid2=fork()=-1); if (pid=0) printf(“p2n”); signal(SIGUSER2,int2); signal(17,SIG_IGT) pause(); exit(0); else printf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省引大济岷水资源开发有限公司公开遴选工作人员考试备考题库及答案解析
- 2026年武汉经开区教育系统校园专项招聘教师50人笔试备考试题及答案解析
- 2026年济宁市直教育系统急需紧缺人才招聘(52名)考试参考题库及答案解析
- 2026江西吉安市吉水县城控人力资源服务有限公司招聘劳务外包1人(一)考试参考题库及答案解析
- 2026中国联通招聘博士后工作站校园招聘(福建有岗)考试参考题库及答案解析
- 资阳市雁江区区属国有企业招聘(15人)考试备考试题及答案解析
- 2025黑龙江交通职业技术学院“黑龙江人才周”招聘38人考试备考题库及答案解析
- 2026上海虹口红树林志愿服务分队招募考试参考试题及答案解析
- 2026年金华武义县中心血库招聘编外卫技人员1人考试备考题库及答案解析
- 2026内蒙古赤峰市宁城县八里罕中学招聘公益性岗位人员1人考试参考试题及答案解析
- GB/T 16603-2025锦纶牵伸丝
- 2025-2030年中国三坐标测量机行业前景趋势及投资风险预测研究报告
- 新生儿血栓护理
- 燃气使用分摊协议书
- 《比较教材研究》课件
- 银行保险机构安全保卫工作自查操作手册
- 胎盘异常超声诊断课件
- 网吧灭火和应急疏散预案
- 学生夜间管理突发事件应急预案
- (高清版)DB5103∕T 12-2019 自贡彩灯 工艺灯通 用规范
- JJF(冀) 3029-2023 医用(硬性)内窥镜校准规范
评论
0/150
提交评论