实验三Linux进程并发程序设计.doc_第1页
实验三Linux进程并发程序设计.doc_第2页
实验三Linux进程并发程序设计.doc_第3页
实验三Linux进程并发程序设计.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖北工业大学工程技术学院实验报告课程名称: 操作系统 实验内容: 实验三Linux进程并发程序设计 学院: 工 程 技 术 学 院 专业班级 11gb软件2班日期: 2013.11.7 教师: 贺红艳 成绩: 一、实验目的1、掌握Linux环境下的进程并发程序的控制。2、掌握gcc编译过程二、预习内容1、gcc编译器GNU C 编译器(GCC)gcc options filenames不用任何选项编译一个程序时, GCC 将会建立(假定编译成功)一个名为a.out 的可执行文件. 例如, gcc test.c 将在当前目录下产生一个叫a.out 的文件: 用 -o 编译选项来为将产生的可执行文件指定一个文件名来代替 a.out:gcc -o count count.c 注意: 当你使用 -o 选项时, -o 后面必须跟一个文件名.2. Linux进程创建相关的系统调用在Linux系统中进程可以由系统调用fork创建,除了0号进程和1号进程以外,几乎所有的进程都是被另一个进程通过执行fork系统创建。调用fork系统调用的进程就是父进程,由fork创建的进程就是子进程。因此,一个进程可以有多个子进程,但只有一个父进程。(1)fork( ) 创建一个新的子进程。其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代码、组代码、环境变量、已打开的文件代码、工作目录和资源限制。系统调用格式: int fork()如果fork成功则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。如果fork失败则直接返回-1。(2)getpid()取得目前进程的识别码(进程ID),系统调用格式: int getpid()例如:#include main() printf(“pid=%dn”,getpid();(3)getppid取得目前进程的父进程识别码。系统调用格式: int getppid() 例如:#include main() printf(“My parents pid=%dn”,getppid();(4)进程同步pid=wait(stat-addr);其中,pid是中止的子进程的pid号,stat-addr是子进程结束时返回的状态信息存放的地址。如果只对进程的同步感兴趣,可以简写为wait(0);执行系统调用wait暂停父进程的执行,使之处于等待状态,一旦子进程执行完毕,处于等待的父进程会被唤醒重新进入执行,这样可以保证子进程与父进程的执行同步。(5)进程的终止exit(status);通过该系统调用进程可以自己终止自己的运行,使进程进入僵死状态。这时被终止的进程释放它占有的所有资源,但保留进程控制块的内容(即或proc结构的内容)。其中status是一个整数,它作为一种结束时的状态传递给该进程的父进程。(6)进程创建程序实示例: #include main() int p1; while(p1=fork()= -1); if(p1=0) printf(“This is a child process.”);/*在子进程中*/ else/*在父进程中*/ printf(“This is a parent process.”); 二、实验步骤1、简单C程序的运行。1) 在编辑器中新建文件test.c2) 输入以下程序:/*#include main () printf(“hello world”n”);printf(“Wellcome!”n”);3) 编译 :gcc o test test.c4) 修改test 文件的访问权限,使其可以被执行。chmod a+x /test4) 运行 ./test2、编写一段程序,使其完成:父进程创建两个子进程,每个进程都在屏幕在显示自己的进程ID号以及其父进程的ID号。写出实验步骤与结果:3、#include #include main()/ int pid=fork();/ if(pid=0) sleep(3); printf(Child: pid=%d, ppid=%dn, getpid(), getppid();else printf(Parent: Child=%d, pid=%d, ppid=%dn, pid, getpid(), getppid(); wait(0);/ printf(After Child ends.n);/printf(In which process?n); / 写出程序,并分析执行结果,并回答In which process?问题。子进程先sleep3秒,父进程先打印,然后等待子进程结束。第一个In which process?在子进程中第二个In which process?在父进程中4、把第3题中位置处分别移至位置和处,分析执行结果,并回答In which process?问题。In which process?只在父进程中执行In which process?在父字进程中都会先执行5、程序修改:将第3题中程序中去掉,写出程序结果,并分析原因。子进程在父进程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论