操作系统实验--进程控制

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

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
 pid_t pid1;
 pid_t pid2;
 if((pid1=fork())<0){
 printf("fork1 failid\n");
 exit(0);}
 else if(pid1==0){//子进程pid1
 printf("Child1 process! PID=%d PPId=%d\n",getpid(),getppid());
 }
 else{
wait();
   if((pid2=fork())<0){
 printf("fork2 failid\n");
 exit(0);
 }
 else if(pid2==0){//子进程pid1
 printf("Child2 process! PID=%d PPId=%d\n",getpid(),getppid());
 }else{
     wait();
     printf("Parent process! PID=%d PPID=%d\n",getpid(),getppid());
     exit(0);}
 }

 return 0;
}

在这里插入图片描述

首先父进程创建子进程pid1等待pid1执行结束,然后创建子进程pid2,再等待pid2执行结束,最后父进程执行。

(2)fork()和exec()系列函数能同时运行多个程序,利用上述函数将下面单进程顺序执行的程序single.c改造成可并发执行3个进程的程序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(“007\n”); //将007替换为本人学号
return 0;
}
void print_msg(char *m)
{
int i;
for(i = 0; i<NUM; i++){
printf(”%s”,m);
fflush(stdout);
sleep(1);
}
}
编译运行方法:
#gcc single.c –o single
#time ./single

//pring.c

#include<stdio.h>
int main(int argc,char *argv[])
{
   char *m=(char *)argv[0];
	int i; 
	for(i = 0; i<5; i++){ 
	printf("%s",m); 
	fflush(stdout); 
	sleep(1);}
   return 0;
}
//multi_process.c
#include <stdio.h> 
#include<unistd.h>
#include<stdlib.h>
#define NUM 5 
int main(void) 
{ 
pid_t pid1;
//pid_t pid3;
pid_t pid2;

if((pid1=fork())<0){
 printf("fork1 faild\n");
     exit(0);
}else if(pid1==0){

execl("print","Good  ",NULL);
}
else{
 if((pid2=fork())<0){
printf("fork2 faild\n");
     exit(0);
}
else if(pid2==0){
execl("print","Morning  ",NULL);
}
else{
execl("print","201908064515  ",NULL);  //将007替换为本人学号
wait();
}
wait();
}
return 0; 
} 

在这里插入图片描述

首先观察单进程,跟多进程的数据结果,可以看到多进程运行速度比单进程快了3倍,主要是多进程创建了多个进程共同执行,各个进程执行不同的数据,相当于我有三个员工来做这个事,你只有一个人。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值