进程

在这里插入图片描述

欢迎来到Cefler的博客?
?博客主页:那个传说中的man的主页
?个人专栏:题目解析
?推荐文章:题目大解析3

在这里插入图片描述


目录

  • ??进程概念
  • ??描述进程——PCB
    • PCB中主要有哪些信息
    • 什么叫进程在排队?
    • linux下的PCB
  • ??Linux下查看进程
    • ps指令
    • linux下获取进程id
  • ??linux下结束进程
    • kill命令

??进程概念

进程是计算机系统中正在执行中的程序实例。它是操作系统对运行中程序的抽象表示。每个进程都有独立的内存空间执行状态,可以包含一个或多个线程。

进程是计算机并发执行的基本单位。在多道程序设计环境中,操作系统通过调度算法将CPU时间片分配给不同的进程,使其交替执行,从而实现多个程序同时运行的效果。

每个进程具有以下特点:

  1. 独立性:每个进程拥有独立的地址空间和资源(如内存、文件、设备等),彼此之间相互隔离。这样可以确保进程之间的数据不会相互干扰,提高系统的安全性和稳定性。

  2. 并发性:操作系统通过调度算法,在有限的CPU资源上交替执行多个进程,使得它们看起来是同时进行的。通过并发执行,系统可以充分利用CPU的处理能力,提高整体的吞吐量。

  3. 资源管理:操作系统负责为进程分配和管理资源,包括内存空间、文件描述符、I/O设备等。进程可以申请和释放资源,通过操作系统提供的接口与外部环境进行数据交换。

  4. 线程支持:进程可以包含一个或多个线程,每个线程拥有独立的执行流和栈,但共享相同的内存空间和其他资源。线程之间的切换开销比进程小,可以更高效地实现并发执行和多任务处理。

  5. 进程间通信:不同进程之间可以通过进程间通信(IPC)机制进行数据交换和协作。常见的IPC方式包括管道(pipe)、共享内存(shared memory)、消息传递(message passing)等。

通过进程的概念,操作系统能够对运行中的程序进行管理和调度,实现多个程序同时运行、资源共享和数据交互,保证系统的稳定性和效率。

??描述进程——PCB

进程有两种的理解概念:

  • 课本概念:运行起来的程序/在内存中的程序
  • 内核观点:担当分配系统资源(CPU时间,内存)的实体。

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。

按照课本概念,进程是一个运行起来的程序/在内存中的程序,那么程序在哪呢?

程序存放在磁盘文件中

当程序被加载时,实际上就是可执行程序被加载拷贝到内存当中,那么接下来的一步就是cpu执行该程序吗?
不,我们在学操作系统管理时,有一句名言:先描述,再组织
所以,我们需要对该进程,也就是这个程序先进行描述,才能去执行。

所以此时我们引入了一个新概念————PCB(process control block)进程控制块
PCB中存放着对该进程的属性,也存放着下一个进程的节点地址,于是就可以将多进程联系在一起,而后就可以对进程进行增删查改

struct PCB1
{
  //进程属性
  struct* PCB2;
}

所以运行一个进程的流程可以表示为如下这张图??。
在这里插入图片描述

PCB中主要有哪些信息

进程控制块(Process Control Block,PCB)是操作系统中用来描述和管理进程的数据结构。每个进程都对应一个唯一的PCB,PCB保存了进程的各种属性和状态信息。

PCB通常包含以下主要信息:

  1. 进程标识符(Process Identifier,PID):用于唯一标识每个进程的数字或字符串。

  2. 程序计数器(Program Counter,PC):记录当前进程正在执行的指令地址,即下一条将要执行的指令位置。

  3. 寄存器集合:保存进程的所有寄存器值,包括通用寄存器、程序状态字(PSW)、堆栈指针等。这些寄存器值在进程切换后可以恢复到原来的状态。

  4. 进程状态(Process State):表示进程当前所处的状态,如运行态(Running)、就绪态(Ready)、阻塞态(Blocked)等。操作系统通过改变进程的状态来实现进程的调度和切换。

  5. 程序和数据:保存进程的代码和数据,在内存中的位置信息。

  6. 进程优先级(Priority):用于调度算法确定进程获得CPU时间片的优先级。

  7. 打开文件表(File Descriptor Table):记录了进程打开的文件和相应的状态信息。

  8. 内存管理信息:包括进程的内存分配情况、页表信息等。

  9. 资源使用情况:记录了进程占用的各种系统资源,如内存、CPU时间、打开的文件数等。

PCB是操作系统管理和调度进程的重要数据结构。通过PCB,操作系统可以了解每个进程的状态、属性和所需资源,从而合理分配和管理系统资源。当操作系统进行进程切换时,PCB的信息将会被保存下来,以便下次恢复进程的执行状态。由于PCB保存了进程的全部信息,因此它也是进程在不同状态之间切换所必需的。

什么叫进程在排队?

在操作系统中,多个进程需要通过CPU时间片轮转的方式分享CPU资源。为了有效地利用CPU资源,操作系统会根据所采用的调度算法,将就绪状态的进程排队等待CPU运行。这种状态下的进程被称为“排队进程”。

当一个进程处于就绪状态时,表示它已经准备好执行,但还没有分配到CPU资源。此时,操作系统会将该进程放到就绪队列里,等待CPU调度器选择并将其调度至CPU上执行。在就绪队列中,进程按照一定的优先级、时间片、先来先服务等规则排队等待

当一个进程获得CPU时间片并开始执行后,它就不再是排队进程,而是“运行进程”。一旦进程的时间片用完或者它主动放弃CPU,它就会重新回到就绪状态,重新加入就绪队列中排队等待。

需要注意的是,由于操作系统可能同时存在多个就绪状态的进程,因此在进行进程调度时,需要考虑进程的优先级、等待时间、资源占用情况等因素,以确保系统的公平性和稳定性。

就像打开网易云音乐,播放音乐时它在运行队列,不播放则在内存中等待。

linux下的PCB

+在Linux中描述进程的结构体叫做task_struct
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

在 Linux 操作系统中,进程控制块(Process Control Block,PCB)被称为任务结构(Task Structure)。它是描述和管理进程的数据结构,在内核中表示一个进程或线程的元信息。

Linux 的 PCB(Tasks Structure)包含了大量的信息,其中一些主要的字段包括:

  1. 进程标识符(Process Identifier,PID):用于唯一标识每个进程的数字或字符串。

  2. 进程状态(Process State):表示进程当前所处的状态,如运行态(Running)、就绪态(Ready)、睡眠态(Sleeping)、僵尸态(Zombie)等。

  3. 描述符表(Descriptor Table):记录了进程打开的文件、设备和网络连接等的相关信息。

  4. 内存管理信息:包括虚拟地址空间的布局、页表信息、堆栈指针等。

  5. 资源使用情况:记录了进程占用的各种系统资源,如内存、CPU时间、文件描述符等。

  6. 优先级和调度信息:包括进程的优先级、时间片大小、调度策略等。

  7. 程序计数器(Program Counter,PC):记录当前进程正在执行的指令地址,即下一条将要执行的指令位置。

  8. 寄存器集合:保存进程的所有寄存器值,包括通用寄存器、程序状态字(PSW)、堆栈指针等。

PCB 在 Linux 内核中起到了非常重要的作用,它包含了操作系统对进程进行调度、管理和切换所需的全部信息。通过访问和更新 PCB 中的字段,内核可以管理进程的状态转换、资源分配、调度切换等操作,从而实现多任务调度和并发执行。

??Linux下查看进程

ps指令

在 Linux 操作系统中,ps 是一个常用的命令行工具,用于查看当前系统中运行的进程信息。ps(process status)命令可以提供各种有关进程状态的信息。

以下是一些常用的ps命令选项:

  • -e:显示所有进程,包括其他用户的进程。
  • -f:显示完整的格式化输出,包括更详细的进程信息。
  • -l:以长格式显示进程信息,包括更多列和详细的信息(如进程的会话 ID、终端号等)。
  • -u <user>:显示指定用户的进程信息。
  • -p <pid>:显示指定 PID 的进程信息。
  • -a:显示当前终端下所有进程信息,包括其他用户的进程。
  • j: 表示以作业控制格式显示输出,提供了更多的详细信息,包括进程的作业控制信息、会话 ID、终端号等。
  • -x:显示没有控制终端的进程信息(守护进程)。
  • -o <format>:自定义输出格式,指定要显示的字段。
  • --sort <key>:按指定的键对进程进行排序显示。
  • --forest:以树状结构显示进程之间的父子关系。
  • -H:显示进程的层次结构。

这些选项可以组合使用,以便获得所需的进程信息。例如,ps -ef 可以显示所有进程的详细信息,ps aux 可以显示所有用户的进程信息,ps ajx 命令将显示所有进程的详细信息,格式为作业控制格式,并且包括没有控制终端的进程。

需要注意的是,ps 命令的选项在不同的操作系统中可能会有所区别,请根据实际情况查看对应系统的手册页(man page)获取更详细的信息。
在这里插入图片描述

linux下获取进程id

进程id(PID)
父进程id(PPID)

获取??

#include <stdio.h>
#include <sys/types.h> //包含该头文件
#include <unistd.h>
int main()
{
 printf("pid: %d\n", getpid());
 printf("ppid: %d\n", getppid());
 return 0;
}

命令行中,父进程一般就是命令行解释器

??linux下结束进程

kill命令

在 Linux 中,kill 是一个用于终止进程的命令。它向指定的进程发送信号,从而影响进程的行为。

kill 命令的基本语法如下:

kill [options] <PID>...

其中,<PID> 是要终止的进程的进程标识符(Process ID),可以指定一个或多个进程。

以下是一些常用的 kill 命令选项:

  • -l:列出可用的信号名称。
  • -s <signal>:指定要发送的信号类型。可以使用信号名称或对应的数字编号。
  • -<signal>:与 -s 选项相同,用于指定要发送的信号类型。
  • -p:打印要发送信号的进程标识符,而不实际发送信号。
  • --help:显示帮助信息。

一些常见的信号类型包括:

  • SIGTERM(默认):请求进程正常终止。
  • SIGKILL:强制终止进程,进程无法捕获或阻止该信号。
  • SIGINT:从终端发送中断信号,通常由 Ctrl+C 触发。
  • SIGHUP:挂起信号,通常用于重新加载配置文件等操作。
  • SIGSTOP:停止进程的执行,进程会暂时被挂起。

例如,要结束进程ID为 1234 的进程,可以使用以下命令:

kill 1234

如果需要强制终止一个进程,可以使用 -9-SIGKILL 选项,如下所示:

kill -9 1234

需要注意的是,不慎终止某些关键进程可能会导致系统异常或数据丢失,因此在使用 kill 命令时请谨慎操作。


如上便是本期的所有内容了,如果喜欢并觉得有帮助的话,希望可以博个点赞+收藏+关注???❤️ ? ?,学海无涯苦作舟,愿与君一起共勉成长

在这里插入图片描述
在这里插入图片描述文章来源地址https://uudwc.com/A/b1Wj9

原文地址:https://blog.csdn.net/cefler/article/details/133205383

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年09月23日 17:18
你真的懂分数吗?(五)——概率与期望
下一篇 2023年09月23日 17:19