欢迎来到天天文库
浏览记录
ID:46609680
大小:59.01 KB
页数:8页
时间:2019-11-26
《进程软中断通信》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
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和SIGPWR以外的信号,核心自动重新设置软中断信号处理程序的值为SIG_
3、DFL,进程不能捕获SIGKILL信号。function的解释如下:(1)function=1时,进程对sig类信号不做任何处理便立即返回,亦即屏蔽该类型号。(2)function=0时,默认值,进程收到sig信号后终止自己。(3)function为非0、非1类整数时,执行用户设置的软中断处理程序。信号的类型值名字说明01SIGHUP挂起(hangup)02SIGINT中断,当用户从键盘按“^c”键或“^break”键时03SIGQUIT退出,当用户从键盘按“quit“键时04SIGILL非法指令05SIGTRAP跟踪陷阱(tracetrap)06SIGIO
4、TIOT指令07SIGEMTEMT指令08SIGFPE浮点运算溢出09SIGKILL终止进程10SIGBUS总线错误11SIGSEGV段违例,进程试图去访问其虚地址空间以外的位置12SIGSYS系统调用中参数错,如系统调用号非法13SIGPIPE向某个非读管道中写入数据14SIGALRM闹钟。当进程希望在某时间后接收信号时发此信号15SIGTERM软件终止(softwaretermination)16SIGUSR1用户自定义信号117SIGUSR2用户自定义信号218SIGCLD某个子进程死19SIGPWR电源故障编程实现例<一>【任务】编程实现,父进程生成
5、子进程,父进程发送信号并等待,子进程接收信号并完成某种功能,然后自我终止并唤醒父进程。【程序】#include#include#includeintfunc();main(){inti,j;signal(17,func);if(i=fork()){printf(“Parent:Signal17willbesendttoChild!”)kill(i,17);wait(0);printf(“Parent:finished!”);}else{sleep(10);printf(“Child:Asign
6、alfrommyParentisreceived!”);exit();}}func(){printf(“Itissignal17processingfunction!”)}【运行结果】【分析】编程实现例<二>【任务】编制一程,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即DEL键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止。childprocess1iskilledbyparent!childprocess2iskilled
7、byparent!父进程等待两个子进程终止后,输出以下信息后终止。Parentprocessiskilled!【程序】#include#include#includeintwaiting(),stop();intwait_mark;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);/*接收DE
8、L信号,并转stop()*/waiting();ki
此文档下载收益归作者所有