实验一进程控制实验_第1页
实验一进程控制实验_第2页
实验一进程控制实验_第3页
实验一进程控制实验_第4页
实验一进程控制实验_第5页
全文预览已结束

下载本文档

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

文档简介

1、实验一 进程控制一、实验目的:加深对进程概念的理解,明确进程和程序的区别;掌握Linux操作系统的进程创建和终止操作,体会父进程和子进程的关系及进程状态的变化;进一步认识并发执行的实质,编写并发程序。二、实验平台:虚拟机:VMWare9以上操作系统:Ubuntu12.04以上编辑器:Gedit | Vim编译器:Gcc三、实验内容:(1)编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示“身份信息”:父进程显示“Parent process! PID=xxx1 PPID=xxx2”;子进程显示“Childx pr

2、ocess! PID=xxx PPID=xxx”。多运行几次,观察记录屏幕上的显示结果,并分析原因。说明:xxx1为进程号,用getpid()函数可获取进程号;xxx2为父进程号,用getppid()函数可获取父进程号;Childx中x为1和2,用来区别两个子进程;wait()函数用来避免父进程在子进程终止之前终止。程序源码:#include<stdio.h>#include<unistd.h>#include<stdlib.h>#define NUM 2int main(void) pid_t pid1,pid2; if(pid1=fork()<0)

3、 printf("创建进程1失败"); else if(pid1=0) /子进程1执行 printf("Child1 process: "); printf("PID=%d PPID=%d n",getpid(),getppid(); sleep(2); else if(pid2=fork()<0) printf("创建进程2失败"); else if(pid2=0) /子进程2执行 printf("Child2 process: "); printf("PID=%d PPID=

4、%d n",getpid(),getppid(); else /父进程执行 wait(); wait(); printf("Parent process: "); printf("PID=%d PPID=%d n",getpid(),getppid(); exit(0); 执行结果whtcmisswhtcmiss-VirtualBox:/Desktop$ gcc test1.c -o testwhtcmisswhtcmiss-VirtualBox:/Desktop$ ./testChild2 process: PID=2527 PPID=252

5、5 Child1 process: PID=2526 PPID=2525 Parent process: PID=2525 PPID=2127 whtcmisswhtcmiss-VirtualBox:/Desktop$ ./testChild2 process: PID=2530 PPID=2528 Child1 process: PID=2529 PPID=2528 Parent process: PID=2528 PPID=2127 whtcmisswhtcmiss-VirtualBox:/Desktop$ ./testChild2 process: PID=2533 PPID=2531

6、Child1 process: PID=2532 PPID=2531 Parent process: PID=2531 PPID=2127实验结果分析:第一次程序运行结果,两个子进程的PPID都是2525,是由同一个进程创建。而父进程PID是2525,父进程PPID是2127,说明父进程也是一系统进程的子进程。第二次程序运行结果,父进程PID是2528,PPID是2127,说明父进程是由同一进程创建的,父进程也是以子进程的方式存在,且进程ID是逐渐递增的。(2)fork()和exec()系列函数能同时运行多个程序,利用上述函数将下面单进程顺序执行的程序single.c改造成可并发执行3个进程的

7、程序multi_process.c;并用time命令获取程序的执行时间,比较单进程和多进程运行时间,并分析原因。 /single.c#include <stdio.h> #define NUM 5 int main(void) void print_msg(char *m); print_msg("Good "); print_msg("Morning "); print_msg("007n"); /将007替换为本人学号return 0; void print_msg(char *m) int i; for(i = 0;

8、 i<NUM; i+) printf("%s",m); fflush(stdout); sleep(1);编译运行方法:#gcc single.c o single#time ./single单线程执行结果:多线程代码:#multi_process.c#include <stdio.h>#include<unistd.h>#include<stdlib.h>#define NUM 5int main(void) pid_t pid3; int i; for(i=1;i<=3;i+) pidi-1=fork(); if(pidi

9、-1=0|pidi-1=-1) break; if(pid0=0) execl("print","print","Good",NULL); else if(pid1=0) execl("print","print","Hello",NULL); else if(pid2=0) execl("print","print","201300814113",NULL); wait(); wait(); wait(); exit(0); return 0; 实验分析:第二个实验结果,第二个程序的多线程因为是并发执行

温馨提示

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

评论

0/150

提交评论