欢迎来到天天文库
浏览记录
ID:8835615
大小:1.72 MB
页数:4页
时间:2018-04-09
《实验三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
此文档下载收益归作者所有