当前位置首页 > 计算机 > linux/Unix
搜柄,搜必应! 快速导航 | 使用教程

实验三linux进程信号通信

文档格式:PPT| 12 页|大小 286.65KB|2024-12-11 发布|举报 | 版权申诉
第1页
第2页
第3页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 12
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • 单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,,*,,,单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,,*,实验三,linux,进程信号通信,一、实验目的,了解,linux,中的信号,熟悉,linux,系统中进程之间软中断信号的基本原理二、实验内容,1,、编写程序:用,fork(),创建两个子进程,再用系统调用,signal(),让父进程捕捉键盘上来的中断信号(按,^c,键);捕捉到中断信号后,父进程用系统调用,kill(),向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息,然后终止:,,,child process1 is killed by parent!,,child process2 is killed by parent!,,父进程等待两个子进程终止后,输出如下的信息后终止:,,parent process is killed!,,2.,分析利用软中断通信实现进程同步的机制3,、写出例,2,中的实验结果,并作适当的分析三、实验指导,1,、,kill(),系统调用,,系统调用格式:,int kill(pid,sig),,参数定义:,int pid,sig;,,其中,,pid,是一个或一组进程的标识符,参数,sig,是要发送的软中断信号。

    1,),pid>0,时,核心将信号发送给进程,pid.,,(2)pid=0,时,核心将信号发送给与发送进程同组的所有进程3,),pid=-1,时,核心将信号发送给所有用户标识符真正等于发送进程的有效用户标识号的进程signal(),系统调用,,预置对信号的处理方式,允许调用进程控制软中断信号系统调用格式:,,signal(sig,function),,参数定义:,,signal(sig,function),,int sig;,,void(*func)();,,其中,,sig,用于指定信号的类型,,sig,为,0,则表示没有收到任何信号,余者如下表所示:,,值,名字,说明,01,SIGHUP,挂起(,hangup),02,SIGINT,中断,当用户从键盘按,^c,时,03,SIGQUIT,退出,当用户从键盘按,quit,键时,04,SIGILL,非法指令,05,SIGTRAP,跟踪陷阱,启动进程,跟踪代码的执行06,SIGIOT,IOT,指令,06,SIGEMT,EMT,指令,07,SIGFPE,浮点运算溢出,08,SIGKILL,杀死终止进程,16,SIGUSR1,用户自定义信号,1,17,SIGUSR2,用户自定义信号,2,,18,SIGCLD,某个子进程死,19,SIGPWR,电源故障,function:,在该进程中的一个函数地址,,,在核心态返回用户态时,,,它以软中断信号的序号作为参数调用该函数,,,对除了信号,sigkill,sigtrap,sigpwr,以外的信号,,,核心自动地重新设置软中断信号处理程序的值为,SIG_DFL,,一个进程不能捕获,SIGKILL,信号,.,,,function,解释如下,:,,(1)function=1,时,,,进程对,sig,类信号不理睬,,,即屏蔽了该类信号,;,,,(2)function=0,时,,,缺省值,,,进程在收到,sig,信号后应终止自已,;,,,(1)function,为非,0,,非,1,类整数时,,function,的值即作为信号处理程序的指针,.,3.lockf(),系统调用,,用作锁定文件的某些段或者整个文件,.,,系统调用格式,:lockf(files,function,size),,参数定义,:,,int lockf(files,function,size),,int files,function;,,long size;,,其中,:files,是文件描述符,;function,是锁定和解锁,;1,表锁定,,0,表解锁,.size,是锁定或解锁的字节数,,,为,0,,表示从文件的当前位置到文件尾,.,5,、参考程序(例,1,),#include,,#include,,#include,,void waiting (),stop();,,int wait_mark;,,main(),,{,,int p1,p2,stdout;,,signal(SIGINT,stop); /*,接收到,^c,信号,,,转,stop*/,,while((p1=fork())==-1); /*,创建子进程,P1*/,,if(p1>0),,{,,while((p2=fork())==-1); /*,创建子进程,p2*/,,if(p2>0),,{,,wait_mark=1;,,sleep(5); /*,接收到,^c,信号,,,转,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,,{,,wait_mark=1;,,signal(17,stop); /*,接收到软中断信号,17,,转,stop*/,,waiting();,,lockf(stdout,1,0);,,printf("child process 2 is killed by parent!\n");,,lockf(stdout,0,0);,,exit(0);,,},,},else,,{,,wait_mark=1;,,signal(16,stop); /*,接收到软中断信号,16,,转,stop*/,,waiting();,,lockf(stdout,1,0);,,printf("child process 1 is killed by parent!\n");,,lockf(stdout,0,0);,,exit(0);,,},,},,void waiting(),,{ while (wait_mark!=0); },,void stop(),,{ wait_mark=0; },另一个信号机构方法的例子:(例,2,),#include,,#include,,main(),,{int status;,,pid_t pid;,,void func();,,signal(SIGUSR1,func);,,If(pid=fork()),,{ printf("parent:will send signal.\n");,,kill(pid,SIGUSR1);,,wait(,,printf(“status=%d: parent finished.\n“,status);},,else,,{sleep(10);,,printf("child :signal is received.\n");,,exit(0);},,},,void func(),,{printf(“it is signal processing function.\n");},,,,,问:此例屏幕上显示的结果是什么?为什么?,。

    点击阅读更多内容
    最新文档
    2025年作风建设学习教育开展情况的报告范文.docx
    在2025年民营企业座谈会上的主持讲话范文.docx
    在2025年全县教育领域群众身边不正之风和腐败问题集中整治调度会上的讲话范文.docx
    工委副书记在2025年机关DeepSeek应用专题辅导培训班开班仪式上的讲话范文.docx
    在2025年DeepSeek大模型政务应用培训会上的讲话范文.docx
    在青年干部培训结业典礼上的讲话文稿.docx
    2025年副书记防汛工作会议上的讲话范文.docx
    2025年主管商务部门党组书记在理论学习中心组会上研讨发言文稿.docx
    2025年国企党委关于干部职工思想政治工作情况的报告范文.docx
    在机关单位作风建设学习教育突出问题专项整治工作部署会议上的讲话范文.docx
    医院领导2025年党风廉政建设推进会上的讲话范文.docx
    2025年关于开展“以案促改”工作实施方案供参考.docx
    在2025年安全生产专项整治暨化工行业风险防控部署会上的讲话范文.docx
    领导干部在“十五五”发展规划编制启动会上的讲话文稿.docx
    2025年书记在慰问老干部暨情况通报会上的主持讲话提纲范文.docx
    2025年作风建设实施方案文稿.docx
    在2025年DeepSeek政务应用培训会上的讲话范文.docx
    2025年领导在DeepSeek政务应用培训会上的讲话参考范文.docx
    2025年国企党委关于干部职工思想政治工作情况的报告文稿.docx
    在青年干部培养工作座谈会上的讲话范文.docx
    卖家[上传人]:huozhebian
    资质:实名认证
    相关文档
    正为您匹配相似的精品文档