第六章进程管理

一、进程和线程的定义

1.进程:进程是指在操作系统中,正在运行的应用程序的一个实例,是系统进行资源分配和调度的基本单位。每个进程都有自己独立的地址空间、内存、数据栈以及其他用于跟踪执行的辅助数据,进程之间相互隔离,一个进程无法直接访问另一个进程的资源,除非通过进程间通信(IPC)机制,如管道、消息队列、共享内存等

2.线程:线程是进程中的一个执行单元,是程序执行的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源,如地址空间、打开的文件等。每个线程都有自己的执行栈、程序计数器(用于记录下一条要执行的指令)和寄存器状态。线程的创建和销毁开销相对较小,上下文切换也比进程快

二、进程的状态

1. 运行态(Running)

进程正在 CPU 上执行。在单 CPU 系统中,同一时刻只有一个进程处于运行态;而在多 CPU 系统中,可能有多个进程同时处于运行态。

2. 就绪态(Ready)

进程已经准备好执行,只等待 CPU 分配时间片。当 CPU 空闲时,操作系统会从就绪队列中选择一个进程进入运行态。

3. 阻塞态(Blocked)

进程由于等待某个事件的发生而暂时无法执行,如等待 I/O 操作完成、等待信号量等。当事件发生后,进程会从阻塞态转换为就绪态。

4. 创建态(New)

进程正在被创建的过程中,操作系统会为其分配资源、初始化数据结构等。

5. 终止态(Terminated)

进程已经执行完毕或被终止,操作系统会回收其占用的资源。

三、进程的查看命令

1. 图形化查看

在 Linux 系统中,有很多图形化工具可以查看进程,如 GNOME System Monitor(适用于 GNOME 桌面环境)、KSysGuard(适用于 KDE 桌面环境)等。这些工具可以直观地显示系统中所有进程的信息,包括进程的名称、状态、CPU 使用率、内存使用率等。

2. ps 命令

ps 是一个常用的命令行工具,用于查看当前系统中进程的状态。常见的用法有:

(1)ps aux

USER:表示启动该进程的用户。

PID:进程的唯一标识符,用于在系统中区分不同的进程。

%CPU:进程占用 CPU 的百分比。

%MEM:进程占用物理内存的百分比。

VSZ:进程使用的虚拟内存大小(单位为 KB)。

RSS:进程占用的物理内存大小(单位为 KB)。

TTY:进程关联的终端设备。若显示为 ?,则表示该进程没有关联控制终端。

STAT:进程的状态,常见状态有 R(运行)、S(睡眠)、D(不可中断睡眠)、Z(僵尸进程)等。

START:进程的启动时间。

TIME:进程累计使用 CPU 的时间。

COMMAND:启动该进程所使用的命令。

(2)ps ax:

PID:这是进程的唯一标识符,每个进程在系统中都有一个独一无二的 PID。通过这个 ID,你可以对特定的进程执行操作,例如终止进程等。

TTY:表示进程所关联的终端设备。如果显示为 ?,则说明该进程没有关联控制终端。

STAT:代表进程的状态,常见的状态有 S(休眠)、R(运行)、Z(僵尸进程)等。

TIME:指的是进程累计使用 CPU 的时间。

COMMAND:显示的是启动该进程所使用的命令。

3. pidof 命令

pidof 命令用于根据进程名查找进程的 PID。例如,要查找名为bash的进程的 PID,可以使用以下命令:

4. pgrep 命令

pgrep 命令也用于查找进程的 PID,但它的功能更强大,可以根据进程名、用户、UID 等条件进行筛选。例如,要查找所有属于用户zsw的进程的 PID,可以使用以下命令:

5. top 命令

top 是一个动态监控工具,它会实时(默认三秒一次)显示系统中各个进程的资源使用情况,包括 CPU 使用率、内存使用率、进程状态等。在 top 界面中,你可以按不同的列进行排序,以便更方便地查看资源占用情况。

四、进程的前后台调用

1. 前台进程

        指在终端中运行,并独占该终端的进程。在前台进程运行期间,你无法在该终端输入其他命令,直到该进程执行完毕或被终止。也就是说,前台进程会阻塞终端的输入,使得你只能等待它完成任务或者手动干预。

2. 后台进程

        在后台运行的进程,不会占用终端,你可以在终端继续输入其他命令并执行新的任务。后台进程在运行时不会与终端进行交互,除非它主动输出信息到终端。

3. 前后台切换

jobs 命令:用于查看当前终端中所有后台作业的信息。

fg 命令:将后台作业切换到前台运行。例如,fg 1 表示将第一个后台作业切换到前台运行。

bg 命令:将一个暂停的作业放到后台继续运行。

五、进程的优先级

1.进程优先级的定义:进程优先级是操作系统为每个进程分配的一个数值,这个数值代表了进程在竞争 CPU 资源时的优先程度。优先级高的进程会优先获得 CPU 资源来执行任务,而优先级低的进程则需要等待。

2.优先级的分类

(1)静态优先级:静态优先级是在进程创建时就确定好的,在进程的整个生命周期内一般不会改变。它是根据进程的重要性、资源需求等因素来设定的一个固定值。

(2)动态优先级:动态优先级是在进程运行过程中,根据进程的实际运行情况和系统的资源使用状况等因素动态调整的优先级。它会随着时间的推移和进程的执行情况而发生变化。

3.静态优先级的调整方法

调整之前:

调整之后:

六、进程信号

1.进程信号的定义

进程信号是 Linux 等操作系统中用于在进程之间传递事件信息、实现进程间通信和控制的一种机制。

2.用户可控进程信号

(1)SIGINT(信号编号 2)

        用于中断进程的正常执行,通知进程应该立即停止当前正在进行的操作。许多交互式程序(如命令行工具、脚本等)会捕获这个信号并进行一些清理工作(如关闭打开的文件、释放临时资源等)后优雅地退出。

(2)SIGTERM(信号编号 15)

        这是一个请求终止进程的信号,通常用于正常地关闭进程。与 SIGKILL 不同,SIGTERM 允许进程在终止前进行一些必要的清理工作,比如保存未保存的数据、关闭数据库连接等。系统在关闭服务时,也常常会先发送 SIGTERM 信号让相关进程正常退出。

(3)SIGKILL(信号编号 9)

        用于强制终止进程,该信号不能被进程捕获、忽略或阻塞。当某个进程出现异常(如死锁、崩溃等),无法通过正常方式终止时,SIGKILL 是让其停止的有效手段。但由于它不允许进程进行任何清理工作,可能会导致一些资源没有被正确释放。

(4)SIGTSTP(信号编号 20)

        用于暂停(挂起)进程的执行。进程收到 SIGTSTP 信号后会进入暂停状态,暂时停止运行。之后可以使用 SIGCONT 信号(通过 kill -CONT <PID> 命令发送)让进程恢复执行。比如在终端中运行一个长时间的任务,按下 Ctrl + Z 可以先暂停它,以便执行其他操作,之后再恢复该任务。

(5)SIGHUP(信号编号 1)

        常用于通知进程重新读取配置文件。许多守护进程(如 Web 服务器、邮件服务器等)会捕获这个信号,当收到 SIGHUP 后,进程会重新加载配置文件,使新的配置生效,而无需重启整个服务。

七、守护进程

1.守护进程的定义

        守护进程(Daemon Process)是一类在 Linux、Unix 等操作系统中非常重要的进程,它们通常在系统后台长时间运行,执行一些系统级别的任务,并且不与任何终端直接关联。

2.守护进程的特点

        (1)后台运行:守护进程脱离终端的控制,在系统后台持续运行,不依赖于用户的登录或注销操作。例如,系统中的网络服务进程(如 sshd 用于 SSH 远程登录服务、httpd 用于 Web 服务等)都是守护进程,它们在系统启动后就开始运行,随时准备响应客户端的请求。

        (2)独立于终端:守护进程没有控制终端,不会在终端上显示输出信息,也不会接收来自终端的输入。这使得它们能够在系统运行期间持续稳定地工作,而不受终端关闭或用户交互的影响。

        (3)系统启动时自动启动:大多数守护进程会在系统启动时自动启动,并在系统关闭时才终止。这样可以确保相关的系统服务在系统运行的整个过程中都可用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值