ZCMU OS 实验2-1 进程相关的系统调用

本文介绍了在Linux环境下学习和实践与进程相关的系统调用,如getpid(),getppid(),fork(),wait(),通过编写和运行示例程序,理解进程信息获取、父子进程控制以及使用工具如vi,gcc,ps和man进行操作和调试。
摘要由CSDN通过智能技术生成

实验2-1  进程相关的系统调用

一、实验目的

学习Linux中与进程控制相关的系统调用,加深对进程、进程树等概念的理解。

二、实验内容

1.    学习使用以下几类系统调用,进行编程练习

       获取进程的信息,getpid(), getppid()

父子进程控制,fork(),wait()

2.    学习熟练地使用程序的编辑vi,编译gcc,运行

3.    学习熟练地使用ps命令观察进程的状态及其关系

4.    选做:使用联机手册man,查看上述系统调用的完整指南

三、实验步骤

完成以下3个实验样例程序的编辑、编译、运行和观察。

1 通过联机手册,深入学习相应的系统调用。

2 对3个样例程序进行自主改造和实验,或者构造新的程序进行实验。

(1) 程序getpid.c

#include <stdio.h>

main()

{

       int pid;

       pid = getpid();

       printf("my pid is %d\n", pid);

       pid = getppid();

       printf("my parent’s pid is %d\n", pid);

       sleep(40);

}

  1. 输入程序 vi  getpid.c

2.编译连接 gcc  getpid.c  -o  getpid

 

3.后台运行 ./getpid  &

4.使用 ps –l 查看进程状态,验证getpid()和getppid()系统调用,注意父子进程的关系。

5.    (选做)使用 man 2 getpid命令,查看getpid()系统调用的联机手册。

(2)程序fork.c

#include <stdio.h>

int z = 0;

main()

{

int pid = getpid();

      if (pid = fork())  {

              z = pid; 

              printf(“z1 = %d\n”, z);

       } else {

              z = pid;

              printf(“z2 = %d\n”, z);

       }

printf(“all done, pid = %d\n”, pid);

}

  1. 先考虑一下,程序的输出结果是什么。

随机输出一个pid 的序号

  1. 输入程序 vi  fork.c

  1. 编译连接 gcc  fork.c  -o  fork

2.运行 ./fork

3.注意观察程序的输出

       验证自己原先的想法是否正确,想一想为什么。

  

4.(推荐)使用man 2 fork命令,查看fork的联机手册。

(3)程序mfork.c

#include <stdio.h>

main()

{

       int i, pid;

       for (i=0; i<10; i++) {

              pid = fork();

              if (pid == 0) {

                     printf("child %d starts running\n", i);

                     sleep(60+i*5);     // every child sleeps for a different period

                     exit(0);

              } else {

                     printf("parent: generate a new child with pid %d\n", pid);

                     sleep(1);

              }

       }

}

  1. 先考虑一下,程序的输出结果是什么。

从0到9 先输出parent: generate a new child with pid

后输出child  starts running

 2.输入程序 vi mfork.c

3.编译连接 gcc  mfork.c  -o  mfork

4.运行 ./mfork

5.注意观察程序的输出

 每隔几秒到十秒钟,反复使用 ps -l 命令观察。想想为什么。

 注意./mfork进程的父进程号为1号进程。为什么?

   

父进程号为1的进程被销毁

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值