进程管理

 

        操作系统第一次实验,进程管理。编程环境Linux+gcc

        这篇文章是在我自己实验报告的基础上,改进而来

 1.进程的创建(必做题)

写一段程序,使用系统调用fork( )创建两个子进程,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b” 和“c。试观察记录屏幕上的显示结果,并分析原因。

<参考程序>

    # include

    main()

    { int  p1, p2;

      while((p1=fork())= = -1);

      if(p1= =0)

         putchar(‘b’);                /*在子进程1*/

      else                              /*在父进程中*/

         { while((p2=fork())= =-1);

           if(p2= =0)

              putchar(‘c’);           /*在子进程2*/

           else                         /*在父进程中*/

               putchar( ‘a’);

         }

     }

 

我的实验过程:

1. 运行虚拟机virtualbox,打开终端,开始编辑,在这里我使用的是gredit

 

 

 

 

 

这里我编程的C语言文件时TestFork.c

 

2. C语言文件中,编辑相应代码:

 

进程管理_第1张图片

 

3.    对程序进行编译连接运行

具体是在终端中输入以下的shell指令:

 

4. 运行结果:

 

 

 

 

 

4. 分析

fock函数调用一次却返回两次;向父进程返回子进程的ID,向子进程中返回0这是因为父进程可能存在很多过子进程,所以必须通过这个返回的子进程ID来跟踪子进程,而子进程只有一个父进程,他的ID可以通过getppid取得。

 

看这个程序的时候,头脑中必须首先了解一个概念:在语句pid=fork()之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了,这两个进程的代码部分完全相同,将要执行的下一条语句都是ifp1==0)。。。。。

 

两个进程中,原先就存在的那个被称作“父进程”,新出现的那个被称作“子进程”。父子进程的区别除了进程标志符(process ID)不同外,变量pid的值也不相同,pid存放的是fork的返回值。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:

 

1. 在父进程中,fork返回新创建子进程的进程ID

 

2.在子进程中,fork返回0

 

3.如果出现错误,fork返回一个负值;

 

参考文献:http://blog.csdn.net/farsight2009/archive/2009/09/04/4518560.aspx

 

 

3.编写程序创建进程树如图1所示,在每个进程中显示当前进程识别码和父进程识别码。(必做题)

 

  进程管理_第2张图片           

 

1.       编写程序:

 

 进程管理_第3张图片

 

 

3.       运行结果:

 

 

                                                   

 

 

 

你可能感兴趣的:(Linux)