实验2Linux进程管理

实验2 Linux进程管理

实验目的

1、加深对进程概念的理解,明确进程和程序的区别

2、进一步认识并发执行的实质

3、分析进程争用资源的现象,学习解决进程互斥的方法

实验性质

验证性实验,必做,3课时

预习与实验要求

1、阅读Linux的sched.h源码文件,加深对进程概念的理解

2、阅读Linux的fork.c源码文件,分析进程的创建过程

要用到的系统调用

1、int fork 创建一个新进程

头文件:#include #include 返回值的意义:0,创建子进程,从子进程返回的id值 -1,创建失败 大于0,从父进程返回的子进程id值

2、lockf files, function, size 锁定/解锁文件或文件的某段

该函数的头文件为:#include

参数定义:int lockf int files, int function, long size

含义:files是文件描述符;

function为1(常量F_LOCK)表示互斥锁定,为0(常量F_ULOCK)表示解锁;

size是锁定或解锁的字节数,若用0,表示从文件的当前位置到文件尾。

实验内容

创建进程。

输入并运行下面的程序。思考为什么会输出两行信息。【建议用emacs或gedit编辑】

int main int pid;

pid fork ;

switch pid case -1: printf "fail to create process\n" ; return 1;

case 0: //对于子进程来讲,变量pid的值为0 printf "I'm son, my pid is %d, my father's pid is %d\n", getpid , getppid ; break;

default: //对于父进程来讲,pid记录了返回的子进程的ID,必然大于0 printf "I'm father, my pid is %d, my son's pid is %d\n", getpid , pid ; return 0; 输出结果并非是一行,而是2行。比如,结果可能是:

I'm son, my pid is 1860, my father's pid is 1859

I'm father, my pid is 1859, my son's pid is 1860

解释:

fork函数被调用一次但返回两次。两次返回的唯一区别:子进程中返回0值,父进程中返回子进程ID。

为什么返回两次?原因:linux将父进程的地址空间、数据空间、堆、栈等资源复制一份给子进程,子进程是父进程的副本,只有代码段是共享的。注意:由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。不同的是,fork 返回给父进程的是新建子进程的ID,返回给子进程的是0。

如果对“返回”还难以理解,想一下学C语言时候的函数调用。函数调用时,将返回地址入栈,再将实参入栈。被调函数从栈中取出参数,赋值给形参,执行完后,取出返回地址,跳回去继续执行。

1、验证进程并发执行

编写一段程序,使用系统调用fork 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一个字符串:父进程显示“parent is working”;两个子进程分别显示“son is working”和“daughter is working”。多运行几次该程序,观察屏幕上的显示结果,并分析原因。

文件名为a21.c

#include

main int p1,p2;

while p1 fork -1 ;/*创建子进程,将其ID号给p1,直到成功*/

if p1 0 printf “son is working\n” ;/*子进程返回的p1才为0,说明此时子进程执行*/

else /*p1 0,说明此p1是父进程函数调用返回的子进程的ID号*/

while p2 fork -1 ;/*创建子进程p2,将其ID号给p2,直到成功*/

if p2 0 printf “dauthter is working” ; /*子进程p2执行*/

else printf “parent” ; /*父进程执行*/ printf “share\n” ;/*3个进程共享的语句*/ 执行:用gcc a21.c –o a21.out编译,产生a21.out文件。在终端里输入./a21.out,并回车执行。看结果。再按向上箭头,并回车重复执行。看结果。如此多执行几次。

分析:可以认为,父进程和两个子进程有相同的代码。相当于,上述程序有3份在内存。它们并发执行,但它们返回的

linux进程管理命令实验,实验2Linux进程管理.doc相关推荐

  1. linux架设DNF服务器,使用linux的dnf命令新一代的RPM软件包管理器

    使用linux的dnf命令新一代的RPM软件包管理器 发布时间:2020-07-08 11:00:25 来源:亿速云 阅读:131 作者:清晨 栏目:服务器 这篇文章将为大家详细讲解有关使用linux ...

  2. Linux 基本管理命令(系统管理,用户管理,进程管理)

    目录 系统管理 man 介绍 语法 man常用的参数 shutdown(关机命令) shutdown文档 语法 参数说明 实例 reboot 介绍 语法 参数说明 实例 sudo命令 介绍 语法 参数 ...

  3. ps查看所有php进程,ps命令就是最基本进程查看命令

    1.ps是什么? 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没 ...

  4. Linux终端常用命令(二)----远程管理常用命令

    远程管理常用命令 目录 远程管理常用命令 1. 关机/重启 1.1 shutdown 2. 查看或配置网卡信息 2.1 网卡 和 IP地址 2.2 ifconfig 2.3 ping 3. 远程登录和 ...

  5. 实验5:进程管理【nyist】

    1.实验目的 (1)理解进程与程序的区别. (2)了解fork( )系统调用的返回值,掌握调用fork( )创建进程的方法. (3)掌握进程并发执行的原理,理解进程并发执行的特点,区分进程并发执行与串 ...

  6. linux进程kill命令关不掉

    1.Linux kill 命令用于删除执行中的程序或job. 语法:kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill ...

  7. Linux Shell常用技巧(九) 系统运行进程

    Linux Shell常用技巧(九) 系统运行进程 十九.  和系统运行进程相关的Shell命令:         1.  进程监控命令(ps):       要对进程进行监测和控制,首先必须要了解当 ...

  8. DOS或命令行下查看进程,结束进程命令

    DOS或命令行下查看进程,结束进程命令  XP中和进程有关的命令: 在system32目录中,dir task* 会看到如下几个文件: +------------------------------+ ...

  9. linux组的管理命令,Linux用户与组管理命令

    1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. who | cut -d" " -f1 | sort -u 或 who | cut -d ...

  10. 关于linux下的命令

    1.文件和目录操作命令 pwd:显示当前的工作目录 cd:切换目录 tree:以树形结构图显示目录下的所有内容 mkdir:创建目录 touch:创建空文件或改变文件的时间戳属性 ls:显示目录下的内 ...

最新文章

  1. QT最方便的LOG库使用Easylogging++,只需要一个头文件
  2. mysql innodb索引覆盖_Mysql InnoDB 覆盖索引与回表
  3. #ifndef #define #endif ”防止头文件被重复包 .
  4. python 文件遍历
  5. 中标麒麟共享win7打印机_Win7系统添加网络共享打印机
  6. IntelliJ IDEA下project概念和module的概念解释
  7. centos有用的命令
  8. php 安装pdo odbc,php如何安装pdo odbc扩展
  9. c语言编程 进制转换,c语言中的进制转换
  10. android9.0官方下载,安卓9.0系统安装包下载
  11. C#读取TIFF文件
  12. [转载]深入理解vue中的slot与slot-scope
  13. 高效沟通的方法与技巧(转自飞马网)
  14. 芝诺数解|「六」享受生活,品味甘甜——重庆奶茶
  15. 小程序地理位置接口wx.getLocation申请审核解决方法(详细说明及避坑)
  16. 初识微服务之Eureka
  17. OpenCV路在何方
  18. 电脑屏幕亮度能否自动调节
  19. Java面试题目大汇总(附参考答案)
  20. C++:实现量化Integration积分测试实例

热门文章

  1. java基础---多线程同步锁问题
  2. 【PAT甲级 大整数BigInteger】1065 A+B and C (64bit) (20 分) Java 全部AC
  3. Linux运行脚本忽略警告,ShellCheck - 显示Shell脚本的警告和建议的工具
  4. Java中的垃圾回收
  5. java动态代理原理及解析
  6. JUC锁-互斥锁ReentrantLock(二)
  7. cJSON源码及解析流程详解
  8. 算法训练营09-深度优先和广度优先
  9. leetcode--70. 爬楼梯
  10. 【终极方法】Unknown initial character set index ‘255‘ received from server. Initial client characte