菜单

Administrator
Administrator
发布于 2026-03-04 / 2 阅读
0
0

Linux中的进程管理

本篇文章描述了Linux中进程管理的基础知识。

一.理解进程和线程

1.1 什么是进程

  1. 进程是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位。
  2. 它包含了程序执行所需的各种资源,如内存空间、文件描述符等
  3. 每个进程都有自己独立的内存空间和系统资源,不同进程之间相互隔离
  4. 程序是静态的代码文件
  5. 进程是指程序运行时的形态
  6. 进程是程序的一个副本
  7. 进程是有生命周期的(准备期,运行期,终止期)

1.2 什么是线程

  1. 线程是进程中的一个执行单元,是CPU调度和分派的基本单位。
  2. 一个进程可以包含多个线程,这些线程共享进程的内存空间和系统资源
  3. 每个线程有自己独立的栈空间和程序计数器、
  4. 线程之间可以并发执行,提高程序的执行效率
  5. 当进程是多任务,cpu是多核心,多任务应该同时被每个核心处理,每个核心处理的任务叫线程

二 进程状态

进程状态码 含义
R(TAKS_RUNNING) 可执行态 (running, ready)
S(TASK_INTERRUPTTABLE) 可唤醒休眠
D(TASK_UNINTERRUPTABLE) 不可唤醒休眠
T(TASK_STOP) 暂停状态
Z(TASK_zombie) 僵死态

三 进程查看的方法

3.1 在图形中查看进程

# gnome-system-monitor

#打开图形中的进程管理工具

3.2 常用进程查看命令的使用

ps #进程查看
ps 命令的三种执行风格UNIXbsdGNU  
a 与终端相关的进程(当用户登陆系统后产生的进程都是带终端的)  
x 与终端无关相关的进程  
u 用户信息归类的查看方式  
f 进程层级关系  
o 显示指定参数  
pid comm nice pri pcpu ppid stat, user, group  
-e 显示所有进程  
-f 显示信息的完整格式  
-H 显示进程的层级结构  
-o 显示指定参数  
--sort= 按照规则排序

ps ax显示信息如下:

PID 进程id  
#TTY 进程用到的终端  
#STAT 进程状态  
#TIME 进程占用cpu时长  
#COMMAND 进程名称

ps aux显示信息如下:

USER 进程所有人  
#PID 进程id  
#%CPU 进程使用cpu的用量


%MEM 进程所用到的内存用量

VSZ 进程使用的虚拟内存大小

#RSS 进程常驻内存中的数据大小

#TTY 进程用到的终端

STAT 进程状态

START 进程运行时长

TIME 进程占用cpu时长

COMMAND 进程名称
pgrep #进程过滤

-uuid 显示指定用户进程

-U user 显示指定用户进程

-t tty 显示指定终端进程

-1 显示进程名称

-a 显示进程的完整名称

-P 进程的子进程

pidof 进程名称 ##查看vim的pid

top ##动态进程查看

top命令的参数

-d 指定刷新频率

-b 以批次方式显示

-n指定显示的批次数量

top内部指令

#Cpu排序

M内存排序

T累计占用cpu时间排序

1 关闭/开启uptime信息

t关闭/开启cpu&task

S指定刷新频率

k 操作进程

u 查看指定用户进程
top中的内容显示信息

09:48:51 系统时间

up 18:54 运行时长

2 users 系统中有两个用户登陆

load average: 0.75, 0.53, 0.41

1min 5min 15min

Tasks:

331 total 任务总量

3 running 正在运行

329 sleeping 休眠人物数量

0 stopped 被暂停数量

0 zombie 僵死人物数量

%Cpu(s)

1.5 us 用户空间

1.9 sy 内核空间

0.0 n i nice值调整时间

58.9 id 空闲时间

0.0 wa 等待io时间

2.1 hi 处理硬件中断时间

0.2si 处理软件中断时间

0.0st被偷走的时间(vm使用时间)

MiB Mem :

7664.6 total, 总量

5383.9 free 空闲

1312.1 used 占用

968.8buff/cache 缓存

MiB Swap: 交换分区用量

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

PID 进程id

USER 进程所有者的用户名

PR 优先级

NI nice值。负值表示高优先级,正值表示低优先级

#VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR 共享内存大小,单位kb

S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进

程)

CPU上次更新到现在的CPU时间占用百分比

%MEM 进程使用的物理内存百分比

TIME+ 进程使用的CPU时间总计,单位1/100秒

COMMAND 命令名/命令行

四 进程的前后台调用

<ctrl1>+<z>     ##把占用shell的进程打入后台挂起

bg              ##把后台挂起的进程运行起来

fg              ##把后台进程调回前台

命令&           ##查看当前shell中在后台的所有工作

jobs            ##运行进程在后台

五 进程的优先级

5.1 进程优先级定义

  1. 进程优先级(Process Priority)是Linux内核用于决定CPU资源分配的关键指标
  2. 优先级越高的进程越有可能被 CPU 优先调度执行

5.2 优先级种类

  1. 静态优先级:由用户或管理员在进程启动时或运行中手动设置,范围为 -20(最高优先级)到 19(最低优先级),数值越小优先级越高。
  2. 动态优先级:由内核根据进程的运行状态(如CPU使用时间、睡眠时长等)自动调整,以平衡系统资源分配。

5.3 静态优先级的调整方法

优先级范围值:

范围: 0–139

内核自控优先级范围:0-99

用户可控优先级:100-139

nice -n -5 cat ##指定优先级打开进程

renice -n -5 43331 ##更改优先级

进程状态字符详解

S #sleeping  
< #优先级高  
S #顶级进程  
T #stop  
N #优先级底  
R #running  
+ #运行在前台

六 进程信号的使用

6.1 进程信号的定义

在Linux系统中,进程信号(Process Signal)是一种软件中断机制,用于在进程之间传递异步通知。它为系统提供了一种处理异常情况、实现进程间通信的简单方式。信号可以由系统内核、其他进程或者用户手动发送给目标进程,当进程接收到信号时,会根据信号的类型执行相应的操作,如终止进程、暂停进程、忽略信号等。

6.2 用户可控进程信号

信号名称 信号编号 默认行为 描述
SIGHUP 1 终止进程 终端断开连接时发送给与该终端关联的进程,常用于重新加载配置文件
SIGINT 2 终止进程 用户在终端按下 ctrl+c 时发送给当前前台进程
SIGQUIT 3 终止进程并生成核心转储文件 用户在终端按下 ctrl+\ 时发送给当前前台进程
SIGTERM 15 终止进程 通常用于请求进程正常终止,是系统默认的终止信号
SIGKILL 9 强制终止进程 不能被捕获、阻塞或忽略,用于强制终止无法正常响应的进程
SIGCONT 18 继续执行暂停的进程 用于恢复被暂停的进程
SIGSTOP 19 暂停进程 不能被捕获、阻塞或忽略,用于暂停进程的执行
SIGTSTP 20 暂停进程 可以被捕获、阻塞或忽略,用于暂停进程的执行

信号特点

  • 可捕获、阻塞和忽略:像 SIGHUP、SIGINT、SIGTERM 这类信号,进程可以编写相应的信号处理函数来捕获它们,也可以选择阻塞(暂时不处理)或者忽略这些信号。
  • 不可捕获、阻塞和忽略:SIGKILL 和 SIGSTOP 信号比较特殊,进程无法对其进行捕获、阻塞或忽略操作,这保证了在必要时可以强制终止或暂停进程

6.3 如何使用进程信号

#进程信号控制工具

kill 进程信号 pid   #处理精确指定的进程

killall 进程信号 进程名字   #按照进程名称批量处理进程

pkil 进程信号 进程条件  #按照条件处理进程


七 systemd守护进程

7.1守护进程是什么

  1. 守护进程( Daemon)是一种在后台持续运行的特殊进程,它不与终端直接交互,通常在系统启动时自动启动,并在系统关闭时才停止。
  2. 守护进程的设计目的是为系统提供各种服务,例如网络服务(如 HTTP 服务器、FTP 服务器)、日志服务、定时任务服务等。它们默默地在后台运行,为其他进程和用户提供支持,确保系统的正常运行。

7.2守护进程的特点

  • 在后台运行:守护进程不会占用终端,不会受到用户登录或注销的影响,持续在后台执行任务。
  • 生命周期长:一般从系统启动开始运行,直到系统关闭才停止,为系统提供长期稳定的服务。
  • 无控制终端:守护进程没有控制终端,不会接收来自终端的输入,也不会将输出显示在终端上。
  • 自成进程组和会话:守护进程通常会创建自己的进程组和会话,以确保独立于控制终端和其他进程。

7.3 Systemd守护进程

  1. Systemd 是 Linux 系统中新一代的初始化系统 (init system),它旨在替代传统的 SysVinit 和 Upstart 等初始化系统
  2. Systemd 提供了一套强大的工具和机制,用于管理系统的启动、服务的管理、资源的分配等。它的设计目标是提高系统的启动速度、简化服务管理、增强系统的可靠性和可维护性。

7.4守护进程管理命令systemctl

systemctl命令的用法

start ##开启  
stop ##关闭  
status ##查看状态  
reload ##重新加载  
restart ##重新启动服务  
enable ##设定服务开机启动  
enable --now ##设定服务开机启动并当前开启服务  
disable ##设定服务开启不其动  
list-units ##查看系统所有服务当前状态  
list-unit-files ##查看服务开机状态  
list-dependencies ##列出服务依赖性  
mask ##冻结服务  
unmask ##解锁  
set-default ##设定系统运行模式  
#multi-user.target 无图形网络模式  
#graphical.target 有图形的网络模式  
get-default ##查看系统运行模式  
##系统运行模式  
#0-6  
#0 关机  
#1 单用户模式  
#2 无图形网络模式  
#3 无图形网络模式  
#4 无图形网络模式  
#5 图形网络模式  
#6 重启

评论