Linux进程的认识与了解[上]

文章目录

  • 1.何为进程?
    • 1.1对进程的认识
    • 1.2基本概念
  • 2.OS如何管理大量进程?
    • 2.1图解
    • 2.2进程的形成
  • 3.何为PCB?
    • 3.1对PCB的认识
    • 3.2task_ struct内容分类
    • 3.2对进程表的认识
  • 4.查看进程
    • 4.1基础指令
    • 4.2获取某进程的PID(process id)
    • 4.3杀死进程
    • 4.4获取当前进程的父进程的ppid(parent process id)

1.何为进程?

1.1对进程的认识

  1. 一个软件,本质就是启动了一个进程
  2. Linux一条命令运行的时候,如./test就是在系统层面创建了一个进程
  3. Linux可以同时加载多个程序,Linux可能同时存在大量的进程在系统中的(软件在OS,硬件在内存)
  4. Linux系统要管理进程 如何管理大量的进程------先描述,在组织
  5. 每个进程都有自己的内存空间、代码、数据和执行状态。
  6. 进程可以独立运行,相互之间不会干扰。
  7. 操作系统可以同时运行多个进程,通过分配时间片轮流执行它们,从而实现多任务处理。
  8. 进程可以与其他进程进行通信和协作,共享资源和数据。
    Linux进程的认识与了解[上]_第1张图片
    Linux进程的认识与了解[上]_第2张图片
    Linux进程的认识与了解[上]_第3张图片

1.2基本概念

  1. 程序的一个执行实例,正在执行的程序
  2. 担当分配系统资源(CPU时间,内存)的实体

2.OS如何管理大量进程?

2.1图解

Linux进程的认识与了解[上]_第4张图片

  1. PCB:进程的属性信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。这类数据结构被称为PCB(process control block)。
  2. 对进程的管理,变成了对进程PCB结构体链表的管理
  3. 进程 = 代码+数据 ➕PCB结构体
  4. 当一个程序加载到内存后 os会对当前进程建立一个PCB用来存放进程的属性信息
  5. 描述进程:PCB结构体描述进程的属性
  6. 组织进程:使用数据结构将各进程的PCB结构体组织起来,形成进程表

所有运行在系统里的进程都以task_struct链表(双链表)的形式存在内核里。

2.2进程的形成

  1. 将存储在磁盘中的可执行文件的代码和数据拷贝的内存中
  2. 创建一个PCB结构体并初始化其属性
  3. 将创建好的PCB加入到操作系统的进程队列

3.何为PCB?

3.1对PCB的认识

PCB[Process Control Block]:进程的属性信息被放在进程控制块(进程属性的集合 一种数据结构)

不同的操作系统PCB的名称不同 在Linux中描述进程的结构体叫做task_struct(task_struct是PCB的一种)
task_struct是Linux内核的一种数据结构 它会被装载到RAM(内存)里并且包含着进程的属性信息
Linux内核使用双向链表组织和维护所有进程的PCB,用于管理和调度进程

在这里插入图片描述

3.2task_ struct内容分类

  1. 标示符: 描述本进程的唯一标示符,用来区别其他进程
  2. 状态: 任务状态,退出代码,退出信号等。
  3. 优先级: 相对于其他进程的优先级。
  4. 程序计数器: 程序中即将被执行的下一条指令的地址
  5. 内存指针: 包括程序代码和进程相关数据的指针,和其他进程共享的内存块的指针
  6. 上下文数据: 进程执行时处理器的寄存器中的数据
  7. I/O状态信息:显示的I/O请求 分配给进程的I/O设备 被进程使用的文件列表。
  8. 记账信息:处理器时间总和,使用的时钟数总和,时间限制,记账号
  9. 其他信息

3.2对进程表的认识

进程表:进程表是操作系统中的数据结构,用于组织记录系统中所有进程的PCB。每个进程都有一个对应的进程表项(PCB),包含进程的标识符、状态、优先级、资源使用情况等信息。进程表可以用于管理和调度进程,操作系统可以根据进程表中的信息对进程进行分配资源、切换上下文等操作。

4.查看进程

4.1基础指令

top: 相当于win下的任务管理器 查看系统所有进程
./test : 从执行这条指令到结束(加载运行调度退出) 这就是一个进程的开始与结束
pwd/touch等指令也是一个进程
ps : 只显示当前终端进程信息
ps axj: 显示系统中所有进程信息

ps axj | grep 'test'ps axj | head -1 && ps axj | grep 'test':

  1. 显示系统中所有进程信息
  2. head -1: 只取第一行(进程信息的标题行
  3. 包含’test’的信息

ls /proc: 内存级的文件系统

Linux进程的认识与了解[上]_第5张图片
Linux进程的认识与了解[上]_第6张图片

  1. 系统中进程的属性数据都保存在/proc下以PID为名的目录
  2. /proc目录下的文件是动态的,每创建进程就会新增一个PID目录,进程结束该PID目录也会被删除
  3. 假定一个进程的PID为xxx 那么通过ls /proc/xxx 可显示PID为xxx的进程的所有属性信息
  4. ls /proc/xxx: 会显示cwd: current work directory当前进程的工作目录 exe: 其实就是我们的test
  5. 每个进程都会有一个属性 保存当前所在的工作路径

4.2获取某进程的PID(process id)

pid_t id = getpid();//程序只有被运行才会被调用 即变成进程 编译期间不调用
printf("pid: %d\n", id);

Linux进程的认识与了解[上]_第7张图片
Linux进程的认识与了解[上]_第8张图片

4.3杀死进程

kill -9 xxx 相当于windows下

Linux进程的认识与了解[上]_第9张图片

4.4获取当前进程的父进程的ppid(parent process id)

pid_t id = getpid();
printf("pid: %d\n", getppid());

Linux进程的认识与了解[上]_第10张图片
一般进程的ppid是bash: bash是shell的一种 一般进程的父进程都是bash 当在一个界面开两个终端 每一个终端都有一个bash 杀死A的bash不影响B的bash

你可能感兴趣的:(Linux从入门到放弃,linux,java,运维)