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

62e50291a81fc54b507f33cb80033297.gif

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

(4页)

89c832a4fbeed288e9f2e336a0a244c2.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

19.90 积分

湖北工业大学工程技术学院实验报告湖北工业大学工程技术学院实验报告课程名称: 操作系统 实验内容: 实验三 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() 例如:#includemain(){printf(“pid=%d\n”,getpid());} (3)getppid 取得目前进程的父进程识别码。 系统调用格式: int getppid() 例如:#includemain(){printf(“My parent’s pid=%d\n”,getppid());} (4)进程同步 pid=wait(stat-addr); 其中,pid 是中止的子进程的 pid 号,stat-addr 是子进程结束时返回的状态信息存放的地 址。如果只对进程的同步感兴趣,可以简写为 wait(0);执行系统调用 wait 暂停父进程的执 行,使之处于等待状态,一旦子进程执行完毕,处于等待的父进程会被唤醒重新进入执行, 这样可以保证子进程与父进程的执行同步。 (5)进程的终止 exit(status); 通过该系统调用进程可以自己终止自己的运行,使进程进入僵死状态。这时被终止的进程 释放它占有的所有资源,但保留进程控制块的内容(即或 proc 结构的内容) 。其中 status 是一个整数,它作为一种结束时的状态传递给该进程的父进程。(6)进程创建程序实示例:#includemain(){ 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.c 2) 输入以下程序: /********************************************************************* #include main () { printf(“hello world”\n”); printf(“Wellcome!”\n”); } 3) 编译 :gcc –o test test.c 4) 修改 test 文件的访问权限,使其可以被执行。chmod a+x /test 4) 运行 ./test2、编写一段程序,使其完成:父进程创建两个子进程,每个进程都在屏幕在显示自己的 进程 ID 号以及其父进程的 ID 号。 写出实验步骤与结果:3、 #include #include main() {// ① int pid=fork(); // ② if(pid==0) {sleep(3); printf(“Child: pid=%d, ppid=%d\n“, getpid(), getppid()); } else { printf(“Parent: Child=%d, pid=%d, ppid=%d\n“, 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 号进程接管。三、总结利用 fork 创建子进程,当返回值等于 0 的时候处于子进程中,大于 0 时为子进程的进程号,为父进程。子进程会复制 fork 函数以下的所有语句。Fork 函数可以嵌套四、评语

关 键 词:

实验 linux 进程 并发 程序设计

524d6daf746efaa52c3c71bbfe7ba172.gif

天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

关于本文

本文标题:实验三linux进程并发程序设计

链接地址:

https://www.wenku365.com/p-9994544.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值