进程软中断通信.doc

进程软中断通信.doc

ID:49471167

大小:63.00 KB

页数:8页

时间:2020-03-01

进程软中断通信.doc_第1页
进程软中断通信.doc_第2页
进程软中断通信.doc_第3页
进程软中断通信.doc_第4页
进程软中断通信.doc_第5页
资源描述:

《进程软中断通信.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、.进程软中断通信【预备知识】进程软中断通信涉及的系统调用描述如下。1.kill()进程用kill()向一个进程或一组进程发送一个信号。系统调用格式为intkill(pid,sig)。其中,pid是一个或一组进程的标识符,sig是要发送的软中断信号。信号的发送分如下三种情况。pid>0时,核心将信号发送给进程pid。pid=0时,核心将信号发送给与发送进程同组的所用进程。pid=-1时,核心将信号发送给所有用户标识符真正等于发送进程的有效用户标识号的进程。2.signal(sig,function)接收信号的程序用signal

2、()来实现对处理方式的预置,允许调用进程控制软中断信号。系统调用格式为signal(sigfunction),此时需包含头文件signal.h。其中,sig用于指定信号的类型,sig为0则表示没有收到任何信号,其余类型如表所示。调用函数使用如下头文件:#include参数定义如下:signal(sig,function)intsig;void(*func)();function是该进程中的一个函数地址,在核心返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGKILL、SIGTRAP和S

3、IGPWR以外的信号,核心自动重新设置软中断信号处理程序的值为SIG_DFL,进程不能捕获SIGKILL信号。function的解释如下:(1)function=1时,进程对sig类信号不做任何处理便立即返回,亦即屏蔽该类型号。(2)function=0时,默认值,进程收到sig信号后终止自己。(3)function为非0、非1类整数时,执行用户设置的软中断处理程序。Word资料.信号的类型值名字说明01SIGHUP挂起(hangup)02SIGINT中断,当用户从键盘按“^c”键或“^break”键时03SIGQUIT退出

4、,当用户从键盘按“quit“键时04SIGILL非法指令05SIGTRAP跟踪陷阱(tracetrap)06SIGIOTIOT指令07SIGEMTEMT指令08SIGFPE浮点运算溢出09SIGKILL终止进程10SIGBUS总线错误11SIGSEGV段违例,进程试图去访问其虚地址空间以外的位置12SIGSYS系统调用中参数错,如系统调用号非法13SIGPIPE向某个非读管道中写入数据14SIGALRM闹钟。当进程希望在某时间后接收信号时发此信号15SIGTERM软件终止(softwaretermination)16SIGU

5、SR1用户自定义信号117SIGUSR2用户自定义信号218SIGCLD某个子进程死19SIGPWR电源故障编程实现例<一>【任务】编程实现,父进程生成子进程,父进程发送信号并等待,子进程接收信号并完成某种功能,然后自我终止并唤醒父进程。【程序】#include#includeWord资料.#includeintfunc();main(){inti,j;signal(17,func);if(i=fork()){printf(“Parent:Signal17willbe

6、sendttoChild!”)kill(i,17);wait(0);printf(“Parent:finished!”);}else{sleep(10);printf(“Child:AsignalfrommyParentisreceived!”);exit();}}func(){printf(“Itissignal17processingfunction!”)}【运行结果】【分析】编程实现例<二>【任务】Word资料.编制一程,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键

7、盘上来的中断信号(即DEL键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止。childprocess1iskilledbyparent!childprocess2iskilledbyparent!父进程等待两个子进程终止后,输出以下信息后终止。Parentprocessiskilled!【程序】#include#include#includeintwaiting(),stop();intwait_m

8、ark;main(){intp1,p2;while((p1=fork())==-1);if(p1>0){while((p2=fork())==-1);if(p2>0){printf(“parent”);wait_mark=1;signal(SIGINT,stop);/*接收DEL信号,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。