OS实验3.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OS实验3

实验3:UNIX/Linux进程控制系统调用 1、实验目的 (1)掌握fork()系统调用的功能与编程方法; (2)掌握exec系列系统调用使用方法与机制; (3)掌握system()系统调用的使用。 2、实现设备 一台装有Windows操作系统PC机,上装有虚拟机系统VMWare,实验过程通过VMWare系统启Linux系统工作。 3、实验方法与注意事项 实验室内的实验环境与系统是共用设施,请不要在系统内做对系统或对其他用户不安全的事情。 要求每个同学登录后系统后,要在自己的家目录内容以自己(拼音)名字或学号,创建一个子目录。以后所有工作都要在自己的目录内进行。建议以后的实验都在同台计算机上做,这样可以保持连续性。 要求认真读懂程序,分析程序,并根据执行结果,分析原因。 用户要按通常实验要认真书写实验报告。 4、实验过程 1)进程的创建 main() { int i; printf(This is a test program for fork()!\n); while((i=fork())==-1); //若创建失败,则反复创建 printf(i=%d\n,i); //打印进程标识符 if(i) printf(Parent process!\n); //i0,在父进程中 else printf(Child process!\n); //i=0,在子进程中 printf( ========END==========!\n); } 编译并执行之,观察结果并分析原因。 (1)编译,设文件名为f.c,编译方法为 ①按默认方式: cc f.c //生成可执行a.out 执行: ./a.out ②生成指定可执行文件,比如f: cc –o f f.c 执行: ./f (2)观查并分析输出结果 2)exec命令的使用 在Unix/Linux系统中,exec是shell的内容命令,当使用exec使用某个shell命令时,被调用者将覆盖调用者。可试试命令: exec ls 执行结果是,出现了登录界面(TUI),或关闭了当前窗口(CUI)。主要原因是ls命令的上下文覆盖当前shell的上下文。 在编程时,若使用了exec系列的系统调用去执行一个shell命令也会性同样的结果,因此当shell要执行一个命令时总是先创建一个子进程,然后由子进程执行程序,而父进程等待子进程结束,事实上是等待被执行者结束。 3)进程控制 用execlp调用实现一个shell的基本处理过程。 利用fork-exec可实现一个shell的基本功能。用户输入命令后, (a)利用fork, (b)利用exec, (c)利用wait, 用C语言实现的程序例如下所示。 #include stdio.h main() { char cmd[100]; //#预留命令缓冲区,最长不得超过100个字符 char *p=$ Ctrl_D to exit! $; //#定义提示符串 while(printf(%s,p),gets(cmd)!=NULL) { if(fork()==0){ if(execlp(cmd,cmd,(char*)0)==-1){ fprintf(stderr,String %s is not a CMD!\n,cmd); exit(-1); } } else wait(0); } } 假如程序的名字为e.c,请编辑、编译、调试之并观查结果。在进入程序的执行界面时,可以分别输入ls 和who后回车,观查程序的输出,最后按组合键Ctrl+D退出。 注意: (1) 在命令执行过程中可以通过Ctrl+D退出; (2) 此程序有不少问题,最发现的是当输入为白空格串(由空格和tab键组成的串)时,甚至是回车时它也会fork一个子进程,并且报告错误。输入的前导和尾部空格并未真正处理(也就是说仍作为倒入的一部分)。若处理前导空格可使用valid_cmd函数。请改进此程序,也消除尾部空格。 4)信号的使用 (1)kill与ps命令 命令ps是用于系统中进程状态查询的,ps -e可以查询系统中的所有进程及其状态,必要时可以使用ps –e | less分屏查看。 ①编制一段程序,使其实现进程的软中断通信。 a. 要求编写一个程序,简单地实现进程间软中断通讯 #include signal.h #include stdio.h int int_int() { printf(I receive SIG_INT!\n); } int int_usr1() { printf(I receive SIG_USR1!\n); } main() { printf(MyPid=%d\n,getp

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档