欢迎来到Cefler的博客?
?博客主页:那个传说中的man的主页
?个人专栏:题目解析
?推荐文章:题目大解析3
目录
- ??进程概念
- ??描述进程——PCB
- PCB中主要有哪些信息
- 什么叫进程在排队?
- linux下的PCB
- ??Linux下查看进程
- ps指令
- linux下获取进程id
- ??linux下结束进程
- kill命令
??进程概念
进程是计算机系统中正在执行中的程序实例。它是操作系统对运行中程序的抽象表示。每个进程都有独立的内存空间和执行状态,可以包含一个或多个线程。
进程是计算机并发执行的基本单位。在多道程序设计环境中,操作系统通过调度算法将CPU时间片分配给不同的进程,使其交替执行,从而实现多个程序同时运行的效果。
每个进程具有以下特点:
-
独立性:每个进程拥有独立的地址空间和资源(如内存、文件、设备等),彼此之间相互隔离。这样可以确保进程之间的数据不会相互干扰,提高系统的安全性和稳定性。
-
并发性:操作系统通过调度算法,在有限的CPU资源上交替执行多个进程,使得它们看起来是同时进行的。通过并发执行,系统可以充分利用CPU的处理能力,提高整体的吞吐量。
-
资源管理:操作系统负责为进程分配和管理资源,包括内存空间、文件描述符、I/O设备等。进程可以申请和释放资源,通过操作系统提供的接口与外部环境进行数据交换。
-
线程支持:进程可以包含一个或多个线程,每个线程拥有独立的执行流和栈,但共享相同的内存空间和其他资源。线程之间的切换开销比进程小,可以更高效地实现并发执行和多任务处理。
-
进程间通信:不同进程之间可以通过进程间通信(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通常包含以下主要信息:
-
进程标识符(Process Identifier,PID):用于唯一标识每个进程的数字或字符串。
-
程序计数器(Program Counter,PC):记录当前进程正在执行的指令地址,即下一条将要执行的指令位置。
-
寄存器集合:保存进程的所有寄存器值,包括通用寄存器、程序状态字(PSW)、堆栈指针等。这些寄存器值在进程切换后可以恢复到原来的状态。
-
进程状态(Process State):表示进程当前所处的状态,如运行态(Running)、就绪态(Ready)、阻塞态(Blocked)等。操作系统通过改变进程的状态来实现进程的调度和切换。
-
程序和数据:保存进程的代码和数据,在内存中的位置信息。
-
进程优先级(Priority):用于调度算法确定进程获得CPU时间片的优先级。
-
打开文件表(File Descriptor Table):记录了进程打开的文件和相应的状态信息。
-
内存管理信息:包括进程的内存分配情况、页表信息等。
-
资源使用情况:记录了进程占用的各种系统资源,如内存、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)包含了大量的信息,其中一些主要的字段包括:
-
进程标识符(Process Identifier,PID):用于唯一标识每个进程的数字或字符串。
-
进程状态(Process State):表示进程当前所处的状态,如运行态(Running)、就绪态(Ready)、睡眠态(Sleeping)、僵尸态(Zombie)等。
-
描述符表(Descriptor Table):记录了进程打开的文件、设备和网络连接等的相关信息。
-
内存管理信息:包括虚拟地址空间的布局、页表信息、堆栈指针等。
-
资源使用情况:记录了进程占用的各种系统资源,如内存、CPU时间、文件描述符等。
-
优先级和调度信息:包括进程的优先级、时间片大小、调度策略等。
-
程序计数器(Program Counter,PC):记录当前进程正在执行的指令地址,即下一条将要执行的指令位置。
-
寄存器集合:保存进程的所有寄存器值,包括通用寄存器、程序状态字(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://uudwc.com/A/b1Wj9