linux进程管理命令实验,实验2Linux进程管理.doc
实验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相关推荐
- linux架设DNF服务器,使用linux的dnf命令新一代的RPM软件包管理器
使用linux的dnf命令新一代的RPM软件包管理器 发布时间:2020-07-08 11:00:25 来源:亿速云 阅读:131 作者:清晨 栏目:服务器 这篇文章将为大家详细讲解有关使用linux ...
- Linux 基本管理命令(系统管理,用户管理,进程管理)
目录 系统管理 man 介绍 语法 man常用的参数 shutdown(关机命令) shutdown文档 语法 参数说明 实例 reboot 介绍 语法 参数说明 实例 sudo命令 介绍 语法 参数 ...
- ps查看所有php进程,ps命令就是最基本进程查看命令
1.ps是什么? 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没 ...
- Linux终端常用命令(二)----远程管理常用命令
远程管理常用命令 目录 远程管理常用命令 1. 关机/重启 1.1 shutdown 2. 查看或配置网卡信息 2.1 网卡 和 IP地址 2.2 ifconfig 2.3 ping 3. 远程登录和 ...
- 实验5:进程管理【nyist】
1.实验目的 (1)理解进程与程序的区别. (2)了解fork( )系统调用的返回值,掌握调用fork( )创建进程的方法. (3)掌握进程并发执行的原理,理解进程并发执行的特点,区分进程并发执行与串 ...
- linux进程kill命令关不掉
1.Linux kill 命令用于删除执行中的程序或job. 语法:kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill ...
- Linux Shell常用技巧(九) 系统运行进程
Linux Shell常用技巧(九) 系统运行进程 十九. 和系统运行进程相关的Shell命令: 1. 进程监控命令(ps): 要对进程进行监测和控制,首先必须要了解当 ...
- DOS或命令行下查看进程,结束进程命令
DOS或命令行下查看进程,结束进程命令 XP中和进程有关的命令: 在system32目录中,dir task* 会看到如下几个文件: +------------------------------+ ...
- linux组的管理命令,Linux用户与组管理命令
1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. who | cut -d" " -f1 | sort -u 或 who | cut -d ...
- 关于linux下的命令
1.文件和目录操作命令 pwd:显示当前的工作目录 cd:切换目录 tree:以树形结构图显示目录下的所有内容 mkdir:创建目录 touch:创建空文件或改变文件的时间戳属性 ls:显示目录下的内 ...
最新文章
- QT最方便的LOG库使用Easylogging++,只需要一个头文件
- mysql innodb索引覆盖_Mysql InnoDB 覆盖索引与回表
- #ifndef #define #endif ”防止头文件被重复包 .
- python 文件遍历
- 中标麒麟共享win7打印机_Win7系统添加网络共享打印机
- IntelliJ IDEA下project概念和module的概念解释
- centos有用的命令
- php 安装pdo odbc,php如何安装pdo odbc扩展
- c语言编程 进制转换,c语言中的进制转换
- android9.0官方下载,安卓9.0系统安装包下载
- C#读取TIFF文件
- [转载]深入理解vue中的slot与slot-scope
- 高效沟通的方法与技巧(转自飞马网)
- 芝诺数解|「六」享受生活,品味甘甜——重庆奶茶
- 小程序地理位置接口wx.getLocation申请审核解决方法(详细说明及避坑)
- 初识微服务之Eureka
- OpenCV路在何方
- 电脑屏幕亮度能否自动调节
- Java面试题目大汇总(附参考答案)
- C++:实现量化Integration积分测试实例
热门文章
- java基础---多线程同步锁问题
- 【PAT甲级 大整数BigInteger】1065 A+B and C (64bit) (20 分) Java 全部AC
- Linux运行脚本忽略警告,ShellCheck - 显示Shell脚本的警告和建议的工具
- Java中的垃圾回收
- java动态代理原理及解析
- JUC锁-互斥锁ReentrantLock(二)
- cJSON源码及解析流程详解
- 算法训练营09-深度优先和广度优先
- leetcode--70. 爬楼梯
- 【终极方法】Unknown initial character set index ‘255‘ received from server. Initial client characte