当前位置: 首页 > news >正文

Linux进程初识

文章目录

  • Linux 进程初识
    • 一、进程基础概念
      • 1. 进程定义
      • 2. 进程标识
    • 二、进程管理操作
      • 1. 进程创建
      • 2. 进程终止
      • 3. 进程查看
    • 三、进程状态详解
      • 1. 主要进程状态
      • 2. 特殊进程
      • 3. 状态转换机制
    • 四、进程调度机制
      • 1. 上下文切换
      • 2. 进程优先级

Linux 进程初识

一、进程基础概念

1. 进程定义

  • 进程:程序执行的一个实例,包括代码、数据和执行上下文
  • PCB(进程控制块):操作系统管理进程的核心数据结构(Linux中为task_struct
  • 设计原理:“先描述后组织” - 通过task_struct结构体描述进程,再通过数据结构组织管理
// Linux中的进程控制块
struct task_struct {// 包含进程所有管理信息long state;          // 进程状态pid_t pid;           // 进程IDstruct files_struct *files; // 打开的文件信息// ... 其他重要字段
};

2. 进程标识

  • PID(进程ID):唯一标识进程的无符号整数
  • PPID(父进程ID):创建当前进程的父进程ID
// 获取进程标识的系统调用
#include <unistd.h>pid_t getpid(void);   // 获取当前进程PID
pid_t getppid(void);  // 获取父进程PID

二、进程管理操作

1. 进程创建

  • fork():创建子进程的核心系统调用
  • 特性
    • 子进程继承父进程的代码和数据
    • 父子进程有独立的地址空间
    • 调用一次返回两次(父进程返回子进程PID,子进程返回0)
#include <unistd.h>pid_t fork(void);  // 返回值:// >0: 父进程,返回值为子进程PID// =0: 子进程// <0: 创建失败

2. 进程终止

  • 正常终止exit()系统调用
  • 强制终止
    • kill -9 PID:强制终止指定进程
    • Ctrl+C:终止前台进程

3. 进程查看

  • 命令行工具

    ps aux       # 查看所有进程
    top          # 动态查看进程状态
    ps -l        # 查看当前终端进程
    
  • /proc文件系统

    • 虚拟文件系统,包含所有进程信息
    • 重要目录:
      • /proc/PID/exe:进程对应的可执行程序路径
      • /proc/PID/cwd:进程当前工作目录
      • /proc/PID/status:进程状态信息
// 更改进程工作目录
chdir("/new/path");  // 系统调用

三、进程状态详解

1. 主要进程状态

状态符号描述
运行R正在CPU执行或等待调度
可中断睡眠S等待资源(可被信号唤醒)
暂停/追踪T/t暂停状态(T:信号暂停,t:调试暂停)
不可中断睡眠D深度睡眠(等待I/O,不可被kill)
僵尸Z进程结束但资源未释放
死亡X进程终止,资源已释放

2. 特殊进程

  • 僵尸进程(Z)
    • 进程已结束但未被父进程回收
    • 保留退出状态供父进程读取
    • 危害:导致内存泄漏
    • 解决方案:父进程调用wait()/waitpid()
  • 孤儿进程
    • 父进程先于子进程终止
    • 被1号init(PID=1,即操作系统)收养
    • 自动回收,不会成为僵尸进程

3. 状态转换机制

  1. 进程运行:每一个cpu会维护一个运行队列 struct runqueue,进程只要在运行队列里,他的状态就是R。cpu会基于时间片进行轮转调度,让多个进程以切换的方式进行调度,在一个时间段内同时得以推进代码,就叫做并发。任何时刻有多个进程真的在同时运行,叫做并行

  2. 阻塞状态:S,D,在等待硬件设备资源时,将该进程从cpu运行队列中剥离下来,放入某一设备的等待队列,因此该进程不会被调度,这就是阻塞状态,当该设备数据准备就绪后,会重新将该进程放入cpu运行队列(进入队列的是test_struct,这个过程也叫唤醒)

  3. 挂起状态:当内存特别不足时,有一些阻塞状态的进程,将他的代码和数据放入磁盘的swap分区内(唤出),可以清理出来一部分内存空间,此时就是挂起状态,当该进程的外设准备好数据,进程即将唤醒时,在将swap中的代码和数据拿出来(唤入),可以更合理的使用内存资源,具体也可以叫阻塞挂起态,还有其他挂起状态

  4. 对比总结

概念描述特点
并发多个进程在单CPU上交替执行宏观同时,微观交替
并行多个进程在多CPU上同时执行真正的同时执行
阻塞 vs 挂起阻塞:等待资源
挂起:内存不足时移至磁盘
挂起是特殊的阻塞

四、进程调度机制

1. 上下文切换

  • 上下文:CPU寄存器中的进程执行信息(当前执行位置,数据信息等)
  • 切换过程
    1. 保存当前进程上下文
    2. 加载新进程上下文
    3. 执行完新进程后,恢复旧进程上下文,继续执行
  • 核心原则:保证进程执行的连续性,具体实现为上下文数据的保护和恢复
  • 寄存器与寄存器信息:cpu内的寄存器,是硬件,只有一套,但是寄存器数据可以有很多套,有几个进程,就有几套和该进程对应的上下文数据,即 寄存器 != 寄存器数据

2. 进程优先级

  • 优先级概念

    指进程获取某种资源的先后顺序。

    在linux中是在task_struct 中的内部字段 int prio,Linux中优先级数字越小,优先级越高。

  • 作用: 优先级高的进程有优先执行的权利,配置进城优先权对多任务环境的linux很有用,可以改善系统性能。

    ​ 还可以把进程运行到指定的cpu上,这样一来,把不重要的进程安排到某个cpu,可以大大改善系统整体性能。

  • Linux系统中优先级指标

    PRL:代表这个进程可被执行的优先级,其值越小越早执行。

    NI:这个进程的nice值,即优先级的修正值,nice值不允许被任意修改,他的范围一般是[-20,19]。

    进程优先级计算: 新的优先级 = 进程优先级(固定不变,初识优先级) + nice值。

  • 补充概念

    竞争性:系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。

    独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰。

  • 查看和修改优先级

    ps -l     # 查看进程优先级
    top       # 动态查看并管理进程
    nice -n 5 ./program  # 启动时设置优先级
    renice 10 -p PID     # 修改运行中进程优先级
    

相关文章:

  • webrtc初了解
  • uniapp+ts模拟popup弹出框(下拉框)
  • 解决 xmlsec.InternalError: (-1, ‘lxml xmlsec libxml2 library version mismatch‘)
  • Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA
  • window11系统 使用GO语言建立TDengine 连接
  • TDengine 运维——巡检工具(安装工具)
  • Oracle 临时表空间详解
  • Dynamics 365 Business Central AI Sales Order Agent Copilot
  • Deepseek应用技巧-Dify本地化搭建合同审批助手
  • 【面板数据】上市公司供应链网络地位数据(2001-2024年)
  • solidworks报错-只有合并特征才能被阵列。如果恰当,请选择实体的阵列
  • 解释k8s种ConfigMap和Secret的作用,如何在Pod中挂载环境变
  • 时间序列噪声模型分析软件推荐与使用经验
  • [9-1] USART串口协议 江协科技学习笔记(13个知识点)
  • 基于生产-消费模式,使用Channel进行文件传输(Tcp方式)
  • Rocky Linux上安装Go
  • 66常用控件_QTableWidget的使用
  • Win11安装Dify
  • APM32微控制器键盘PCB设计实战教程
  • Scratch节日 | 拯救屈原 | 端午节
  • 手机网站自动适配/百度快照怎么没有了
  • 企业实缴公示在什么网站做/某产品网络营销推广方案
  • 济南高新网站建设/石家庄最新消息今天
  • 快速生成网站/常见的网络营销工具
  • 网站空间用万网的 域名不在万网/百度爱采购客服电话
  • 做网站不如做公众号/seo排名赚app官网