首页 > 系统相关 > 12.进程控制

12.进程控制

时间:2023-08-21 18:33:33浏览次数:36  
标签:fork 控制 12 函数 pid kill 进程 CPU

12.进程控制

1.学习目标

  • 了解进程相关的概念

  • 掌握fork/getpid/getppid函数的使用

  • 熟练掌握ps/kill命令的使用

  • 熟练掌握execl/execlp函数的使用

  • 说出什么是孤儿进程什么是僵尸进程

  • 熟练掌握wait函数的使用

  • 熟练掌握waitpid函数的使用

2.进程相关概念

2.1 程序和进程

  • 程序,是指编译好的二进制文件,在磁盘上,占用磁盘空间,是一个静态的概念。

  • 进程,一个启动的程序, 进程占用的是系统资源,如:物理内存,CPU,终端等,是一个动态的概念

  • 程序 → 剧本(纸)

  • 进程 → 戏(舞台、演员、灯光、道具...)

同一个剧本可以在多个舞台同时上演。同样,同一个程序也可以加载为不同的进程(彼此之间互不影响)

2.2 并行和并发

  • 并发,在一个时间段内,是在同一个cpu上,同时运行多个程序。

如:若将CPU的1S的时间分成1000个时间片,每个进程执行完一个时间片必须无条件让出CPU的使用权,这样1S中就可以执行1000个进程。




  • 并行性指两个或两个以上的程序在同一时刻发生(需要有多颗)。


2.3 PCB-进程控制块

每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。

/usr/src/linux-headers-4.4.0-96/include/linux/sched.h文件的1390行处可以查看struct task_struct 结构体定义。其内部成员有很多,我们重点掌握以下部分即可:

  • 进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整数。

  • 进程的状态,有就绪、运行、挂起、停止等状态。

  • 进程切换时需要保存和恢复的一些CPU寄存器。

  • 描述虚拟地址空间的信息。

  • 描述控制终端的信息。

  • 当前工作目录(Current Working Directory)。

  █getcwd --pwd

  • umask掩码。

  • 文件描述符表,包含很多指向file结构体的指针。

  • 和信号相关的信息。

  • 用户id和组id。

  • 会话(Session)和进程组。

  • 进程可以使用的资源上限(Resource Limit)。

  █ulimit -a

2.4 进程状态(面试考)

  • 进程基本的状态有5种。分别为初始态,就绪态,运行态,挂起态与终止态。其中初始态为进程准备阶段,常与就绪态结合来看。

3.创建进程

3.1 fork函数

  • 函数作用:创建子进程

  • 原型: pid_t fork(void);

函数参数:无

返回值:调用成功:父进程返回子进程的PID,子进程返回0;

调用失败:返回-1,设置errno值。

● fork函数代码片段实例

  • 调用fork函数的内核实现原理:

● fork函数总结

 ►fork函数的返回值?

   父进程返回子进程的PID,是一个大于0数;

   子进程返回0;

  特别需要注意的是:不是fork函数在一个进程中返回2个值,而是在父子进程各自返回一个值。

 ►子进程创建成功后,代码的执行位置?

​   父进程执行到什么位置,子进程就从哪里执行

 ►如何区分父子进程

  通过fork函数的返回值

 ►父子进程的执行顺序

  不一定,哪个进程先抢到CPU,哪个进程就先执行

3.2 ps命令和kill命令

  • ps aux | grep "xxx"

  • ps ajx | grep "xxx"

  ▶ -a:(all)当前系统所有用户的进程

  ▶-u:查看进程所有者及其他一些信息

  ▶-x:显示没有控制终端的进程 -- 不能与用户进行交互的进程【输入、输出】

  ▶-j: 列出与作业控制相关的信息

  • kill -l 查看系统有哪些信号

  • kill -9 pid 杀死某个线程

3.3 getpid/getppid

  • getpid - 得到当前进程的PID

pid_t getpid(void);

  • getppid - 得到当前进程的父进程的PID

pid_t getppid(void);

3.3 练习题

  • 编写程序,循环创建多个子进程,要求如下:

1.多个子进程是兄弟关系。

2.判断子进程是第几个子进程

画图讲解创建多个子进程遇到的问题

注意:若让多个子进程都是兄弟进程,必须不能让子进程再去创建新的子进程。

  • 编写程序,测试父子进程是否能够共享全局变量

重点通过这个案例讲解读时共享,写时复制

标签:fork,控制,12,函数,pid,kill,进程,CPU
From: https://www.cnblogs.com/codemagiciant/p/17646769.html

相关文章

  • 如何打开windows的控制面板
    在Windows上打开控制面板的方式有多种,以下是几种常见的方法:方法1:使用开始菜单1.点击Windows开始按钮(通常位于屏幕左下角)。2.在开始菜单中,可以直接在搜索框中输入"控制面板"。3.在搜索结果中,点击"控制面板"图标,即可打开控制面板窗口。方法2:使用运行命令1.按下Win+R键组合......
  • 永嘉原厂超强抗干扰VK36N系列 1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20键
      概述.VK36N1D具有1个触摸按键,可用来检测外部触摸按键上人手的触摸动作。该芯片具有较高的集成度,仅需极少的外部组件便可实现触摸按键的检测。提供了1个1对1输出脚,可通过IO脚选择上电输出电平,有直接输出和锁存输出2个型号可选。芯片内部采用特殊的集成电路,具有高电源电压......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-12-playwright操作iframe-中篇
    1.简介按照计划今天就要用实际的例子进行iframe自动化测试。经过宏哥长时间的查找,终于找到了一个含有iframe的网页(QQ邮箱和163邮箱),别的邮箱宏哥就没有细看了。所以今天这一篇的主要内容就是用这两个网页的iframe结合上一篇的理论知识,宏哥给小伙伴或者童鞋们演示一下。2.QQ邮箱2......
  • HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制if/else条件渲染
    ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,使用if、else和elseif渲染对应状态下的UI内容。说明:从APIversion9开始,该接口支持在ArkTS卡片中使用。一、使用规则支持if、else和elseif语句。if、elseif后跟随的条件语句可以使用状态变量。允许在容器组件内使用,通过......
  • SVN——Subversion版本控制系统
    SVN系统:软件版本管理软件。也是甲方的一个产品,海马SVN系统是龚黎明部署的(怎么访问?)。SVN的全称是Subversion(Subversion的中文翻译是“版本控制”),即版本控制系统。它是最流行的一个开放源代码的版本控制系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数......
  • mysql查询慢是为什么 怎么改善43.242.205.12
    MySQL查询速度慢是一个令人头痛的问题,它可能会导致应用程序性能下降,影响用户体验。为了解决这个问题,需要了解MySQL查询速度慢的原因,并采取相应的改善措施。一、MySQL查询速度慢的原因43.242.205.1查询语句不合理不合理的查询语句是导致MySQL查询速度慢的常见原因之一。例如,使用SEL......
  • 【JMeter】JMeter控制RPS
    JMeter控制RPS目录JMeter控制RPS一、前言二、配置RPS三、运行结果一、前言​ RPS(RequestPerSecond)一般用来衡量服务端的吞吐量,相比于并发模式,更适合用来摸底服务端的性能。我们可以通过使用JMeter的常数吞吐量定时器来限制每个线程的RPS。对于RPS,我们可以把他理解为我......
  • 使用MD5算法和sha512sum校验和检验文件完整性
    目录一.前言二.MD5算法简介三.什么是校验和四.使用MD5算法和sha512sum校验和检验文件完整性五.总结一.前言在我们日常生活中,无论是下载文件、传输数据还是备份重要信息,如何确保数据的完整性始终是一个不能忽视的问题。本文将向大家介绍如何使用MD5算法和sha512sum校验和来进行文......
  • 相识第12天——某人的小作文
    8月21日上午,多云一大早,有个小滑头上来就问我“有没有收过小作文”我寻思我也没当过老师,怎么收别人作文妹妹还真是又机灵又调皮非常感动,这篇小作文直接戳到阅卷人心里了,太赖皮了没法打分怎么说呢,越来越喜欢这样有趣的小女孩了希望她吃好喝好变成猪猪 ......
  • 《操作系统》---进程管理
    操作系统概述作用特征并发性共享性虚拟性不确定性功能进程管理存储管理文件管理设备管理作业管理分类计算机启动的基本流程BIOS主引导记录操作系统进程的组成和状态组成PCB程序控制块程序描述程序要做什么数据三态运行就绪只缺CP......