实验三linux进程并发程序设计

实验三linux进程并发程序设计

ID:8835615

大小:1.72 MB

页数:4页

时间:2018-04-09

实验三linux进程并发程序设计_第1页
实验三linux进程并发程序设计_第2页
实验三linux进程并发程序设计_第3页
实验三linux进程并发程序设计_第4页
资源描述:

《实验三linux进程并发程序设计》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、湖北工业大学工程技术学院实验报告课程名称:操作系统实验内容:实验三Linux进程并发程序设计学院:工程技术学院专业班级11gb软件2班日期:2013.11.7教师:贺红艳成绩:一、实验目的1、掌握Linux环境下的进程并发程序的控制。2、掌握gcc编译过程二、预习内容1、gcc编译器GNUC编译器(GCC)gcc[options][filenames]不用任何选项编译一个程序时,GCC将会建立(假定编译成功)一个名为a.out的可执行文件.例如,gcctest.c将在当前目录下产生一个叫a.out的文件:用-o编译选项来为

2、将产生的可执行文件指定一个文件名来代替a.out:gcc-ocountcount.c   注意:当你使用-o选项时,-o后面必须跟一个文件名.2.Linux进程创建相关的系统调用在Linux系统中进程可以由系统调用fork创建,除了0号进程和1号进程以外,几乎所有的进程都是被另一个进程通过执行fork系统创建。调用fork系统调用的进程就是父进程,由fork创建的进程就是子进程。因此,一个进程可以有多个子进程,但只有一个父进程。(1)fork()创建一个新的子进程。其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代

3、码、组代码、环境变量、已打开的文件代码、工作目录和资源限制。系统调用格式:intfork()如果fork成功则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。如果fork失败则直接返回-1。(2)getpid()取得目前进程的识别码(进程ID),系统调用格式:intgetpid()例如:#includemain(){printf(“pid=%d”,getpid());}(3)getppid取得目前进程的父进程识别码。系统调用格式:intgetppid()例如:#includ

4、emain(){printf(“Myparent’spid=%d”,getppid());}(4)进程同步pid=wait(stat-addr);其中,pid是中止的子进程的pid号,stat-addr是子进程结束时返回的状态信息存放的地址。如果只对进程的同步感兴趣,可以简写为wait(0);执行系统调用wait暂停父进程的执行,使之处于等待状态,一旦子进程执行完毕,处于等待的父进程会被唤醒重新进入执行,这样可以保证子进程与父进程的执行同步。(5)进程的终止exit(status);通过该系统调用进

5、程可以自己终止自己的运行,使进程进入僵死状态。这时被终止的进程释放它占有的所有资源,但保留进程控制块的内容(即或proc结构的内容)。其中status是一个整数,它作为一种结束时的状态传递给该进程的父进程。(6)进程创建程序实示例:#includemain(){intp1;while((p1=fork())==-1);if(p1==0)printf(“Thisisachildprocess.”);/*在子进程中*/else/*在父进程中*/{printf(“Thisisaparentprocess.”);

6、}}二、实验步骤1、简单C程序的运行。1) 在编辑器中新建文件test.c2) 输入以下程序:/*********************************************************************#includemain(){printf(“helloworld””);printf(“Wellcome!””);}3)编译:gcc–otesttest.c4)修改test文件的访问权限,使其可以被执行。chmoda+x/test4)运行./test2、编写一段程序

7、,使其完成:父进程创建两个子进程,每个进程都在屏幕在显示自己的进程ID号以及其父进程的ID号。写出实验步骤与结果:3、#include#includemain(){//①intpid=fork(); //②  if(pid==0){          sleep(3);                     printf("Child:pid=%d,ppid=%d",getpid(),getppid());         }else          {          pr

8、intf("Parent:Child=%d,pid=%d,ppid=%d",pid,getpid(),getppid());        wait(0); //④        printf("AfterChildends.");   // ⑤   }printf("Inwhichproces

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

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

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