实验5 进程管理
实验目的
(1)熟悉进程及进程控制等基本概念在Linux操作系统中的实现
(2)利用Linux提供的系统调用函数/库函数实现进程管理
实验准备及预习
阅读讲义《附件6, Linux进程管理》,理解进程在其生命周期中的主要状态及有关操作命令和函数:ps、fork()、exit()、sleep()和wait()。
实验内容
1、 复习命令“ps”,了解常用命令选项“-ef”“-aux”,以及各输出项的含义
[操作步骤]在终端输入命令“ps - aux” ,查看当前系统中有哪些进程在运行,注意各输出项的含义。
2、修改以下程序,使得在各进程的输入信息中能显示自己的进程号。
#include <stdio.h>
int main()
{ int  p1, p2, i;
  while((p1=fork())== -1);
  if(p1==0){
        for(i=0;i<3;i++) printf(“child %d\n”, p1);
        printf(“child %d is interrupted, press [enter] to continue:\n”,p1);
        getchar();
        for(i=0;i<3;i++) printf(“child %d\n”, p1);   
  } else {
        while((p2=fork())== -1);
          if(p2==0){
            for(i=0;i<3;i++) printf(“child %d\n”, p2);
            printf(“child %d is interrupted, press [enter] to continue:\n”,p2);
            getchar();
            for(i=0;i<3;i++) printf(“child %d\n”, p2);
        }else{
            for(i=0;i<3;i++) printf(“parent\n”);
            printf(“father is interrupted, press [enter] to continue:\n”);
            getchar();
            for(i=0;i<3;i++) printf(“parent\n”);}   
  }
  return 0;
  }
3、函数exit() _exit()非常相似,都可以终止当前进程的执行。请通过以下两个程序体会二者的区别。
程序1,程序名为exit_test.c
/* exit_test.c */
#include<stdlib.h>
main()
{    printf("output begin\n");
    printf("content in buffer");
    exit(0);
    printf("never be displayed!\n");
}
 
程序2_exit_test.c
/* _exit_test.c */
#include<unistd.h>
main()
{    printf("output begin\n");
    printf("content in buffer");
    _exit(0);
    printf("never be displayed!\n");
}
4在一个进程调用了exit之后,该进程并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程对其进行收集并撤消。请通过以下步骤了解linux进程的这一特点。
1)编辑、编译以下程序;
/* zombie.c */
#include <sys/types.h>
#include <unistd.h>
 
main()
{        pid_t pid;
         
          pid=fork();
          if(pid<0) /* 如果出错 */
                    printf("error occurred!\n");
          else if(pid==0) /* 如果是子进程 */
                    exit(0);
          else                /* 如果是父进程 */
                    sleep(60);          /* 休眠60秒,这时父进程将放弃CPU*/
                    wait(NULL);        /* 收集僵尸进程 */
}
2后台运行程序,输入命令“./zombie &”,注意屏幕显示的进程号;
3)列举系统中的所有进程,输入命令“ps -ax”,注意状态为“Z”的进程。
5wait调用的作用都是收集僵尸进程留下的信息,同时使这个进程彻底消失,请通过下面的程序体会这个系统调用的功能。
/* wait_test.c */
#include <sys/types.h>
linux下的sleep函数
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
 
main()
{        pid_t pc,pr;
 
          pc=fork();
          if(pc<0)            /* 如果出错 */
                    printf("error ocurred!\n");
          else if(pc==0){                /* 如果是子进程 */
                    printf("This is child process with pid of %d\n",getpid());
                    sleep(10);          /* 睡眠10秒钟 */
          }
          else{                          /* 如果是父进程 */

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。