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

Linux 下进程基本概念与状态

文章目录

  • 一、进程的定义
  • 二、 描述进程-PCB
    • task_ struct内容分类
  • 三、 进程状态

一、进程的定义

  1. 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。
  2. 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

二、 描述进程-PCB

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。称之为PCB(process control block),Linux操作系统下的PCB是 task_struct

task_ struct内容分类

  1. 标示符: 描述本进程的唯一标示符,用来区别其他进程。

pid


  1. 状态: 任务状态,退出代码,退出信号等。
    status

  1. 优先级: 相对于其他进程的优先级。
    prio

  1. 程序计数器: 程序中即将被执行的下一条指令的地址。
  2. 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
    point

  1. 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
    memory

  1. I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
    file

  1. 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
    time
  2. 其他信息

大体图
picture

三、 进程状态

在Linux系统中,进程的状态可以通过多种方式来查看,最常见的方式是使用ps命令和top命令。以下是一些常见的进程状态及其解释:

  1. R (运行状态)

    • 进程正在运行或在运行队列中等待。
  2. S (可中断的睡眠状态)

    • 进程正在等待某个事件完成,可以被信号中断。例如,等待用户输入或等待资源变得可用。
  3. D (不可中断的睡眠状态)

    • 进程处于睡眠状态,但不可被信号(signal)中断。这通常表示进程正在等待I/O操作(如磁盘操作)完成。

使用htop命令查看htop

  1. T (停止状态)

    • 进程已被停止(通常是通过信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU)。

    使用 19) SIGSTOP 号信号停止正在运行的进程

    kill -19  pid
    

    stop

  2. t (跟踪或停止状态)

    • 进程被跟踪,通常是由调试器停止的。
      使用gdb调试时查看进程状态
      t
  3. Z (僵尸状态)

  • 进程已经结束,但其父进程尚未通过wait()系统调用来回收其资源。此时,进程仍保留在进程表中,但不再占用系统资源(除了进程表项)。
  • 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
    所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态
    代码如下
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> // 包含 sleep 和 getpid 函数所需的头文件
#include <sys/types.h> // 包含 pid_t 所需的头文件

int main() {
    pid_t id = fork();

    if (id < 0) {
        perror("fork");
        return 1;
    } else if (id > 0) { // 父进程
        printf("parent[%d] is sleeping...\n", getpid());
        sleep(30); // 父进程休眠30秒
    } else { // 子进程
        printf("child[%d] is beginning Z...\n", getpid());
        sleep(5); // 子进程休眠5秒
        exit(EXIT_SUCCESS); // 子进程正常退出
    }

    return 0; 
}

如下图


child


僵尸进程危害

僵尸进程(Zombie Process)在Linux操作系统中是一种特有的进程状态,这种状态的进程不再占用CPU或内存资源(除了进程表中的一个槽位),但它们仍然会对系统产生一些潜在的危害。

  1. 资源浪费

    • 僵尸进程虽然不再执行任何代码或占用CPU时间,但它们仍然占用系统进程表中的一个槽位。在进程表资源有限的情况下,如果僵尸进程数量过多,可能会导致进程表溢出,进而影响到系统的正常运行。
    • 此外,由于父进程需要维护对子进程的引用,这也会占用一定的系统资源。
  2. 进程号枯竭

    • 系统中的进程号是有限的。如果僵尸进程过多,它们会占用大量的进程号,导致系统无法分配新的进程号给新创建的进程。这可能会影响到系统的并发性能和任务调度能力。
  3. 父进程信息泄漏

    • 僵尸进程仍然保留有关其父进程的一些信息,如父进程的PID(进程标识符)。在某些安全敏感的应用程序中,这可能会导致敏感信息的泄漏。

http://www.kler.cn/a/409078.html

相关文章:

  • 谷歌云无法ssh登录(修改sshd_config也不行)
  • 差分进化算法原理与复现
  • OCR-free Document Understanding Transformer
  • oracle查看锁阻塞-谁阻塞了谁
  • MD5算法的学习
  • Spark——安装步骤详细教程
  • Spring Boot应用开发实战:构建RESTful API服务
  • 10大核心应用场景,解锁AI检测系统的智能安全之道
  • 网络安全应急响应及其发展方向
  • SQL注入靶场演练
  • C++ 日期计算器的实现(运算符重载)
  • mysql in查询大数据量业务无法避免情境下优化
  • 从RNA测序数据中推断差异RNA编辑位点的统计推断
  • Colors and Intervals
  • vue项目中中怎么获取环境变量
  • Spring Boot OA:企业办公自动化的高效路径
  • 设计模式——组合实体模式
  • 7-366 解救小鱼干
  • 大数据背景下的数据质量挑战与解决方案
  • 【数据分享】2024年我国省市县三级的住宿服务设施数量(8类住宿设施/Excel/Shp格式)
  • PostgreSQL的内存结构
  • Unity 使用 ExcelDataReader 读取Excel表
  • Ubuntu,openEuler,MySql安装
  • 力扣797. 所有可能的路径
  • 什么是Webpack,有什么特点
  • 基于FPGA(现场可编程门阵列)的SD NAND图片显示系统是一个复杂的项目,它涉及硬件设计、FPGA编程、SD卡接口、NAND闪存控制以及图像显示等多个方面