操作系统原理A实验报告学生姓名:陶浩学号:1708090122班级:惠普测试171实验名称:实验2进程的创建与控制实验指导教师:葛艳(一)进程的创建一、实验目的1.加深对进程、进程树等概念的理解。2.进一步明确进程和程序的区别。3.理解进程并发执行的实质。4.掌握Linux系统中进程的创建方法及并发执行情况。二、实验内容1.运行给定参考程序fork1.c(P31页),把运行结果截图。分析fork()创建子进程的要点。2.运行下面的程序,把运行结果截图。分析“printf(”fork1,PID=%d\n“,getpid());”为什么会被执行两次。main(){intp1,p2;p1=fork();//子进程1printf(fork1,PID=%d\n,getpid());//父进程,子进程1if(p10)/*如果是父进程*/{p2=fork();//子进程2if(p2==0)printf(fork2,PID=%d\n,getpid());/*子进程2执行*/}elseprintf(“fork3,PID=%d\n”,getpid());/*子进程P1执行*/sleep(50);}3.编写一段程序,使用系统调用fork()创建一个子进程。子进程输出fork()返回值,获取并输出父进程的ID号。父进程等待子进程运行结束后,输出fork()返回值,获取并输出自己的ID号。(要求把程序调试和运行结果截图)三、实验步骤及运行结果分析1.运行给定参考程序fork1.c(P31页),把运行结果截图。分析fork()创建子进程的要点。分析:p=frok(),生成一个父进程和一个子进程。wait(0);阻塞了父进程,让子进程先执行。p=0---在子进程中p变量保存的fork()返回值为0,表示当前进程是子进程。p0---在父进程中,p变量保存的fork()返回值为子进程的ID值(进程的唯一标识符)p=-1---创建失败。2.运行下面的程序,把运行结果截图。分析“printf(”fork1,PID=%d\n“,getpid());”为什么会被执行两次。分析:p1=fork();生成一个父进程和一个子进程,父进程和子进程重复执行所以printf(”fork1,PID=%d\n“,getpid());执行了两次。3.编写一段程序,使用系统调用fork()创建一个子进程。子进程输出fork()返回值,获取并输出父进程的ID号。父进程等待子进程运行结束后,输出fork()返回值,获取并输出自己的ID号。(要求把程序调试和运行结果截图)关键词:进程:进程就是指一个程序的运行过程,进程和线程类似有着三种状态,就绪状态、运行状态和阻塞。进程由控制块、程序段、数据段三部分组成。fork()返回值pid意义如下:p=0:在子进程中,p变量保存的fork()返回值为0,表示当前进程是子进程。p0:在父进程中,p变量保存的fork()返回值为子进程的ID值(进程唯一标识符)。p=-1:创建失败。