linux学习进展 进程

在Linux系统中,进程是操作系统进行资源分配和调度的基本单位,理解进程的概念、状态及管理方法,是深入掌握Linux系统运维和开发的核心基础。本节课将从进程的基本定义入手,逐步讲解进程的状态、标识、管理命令及实操技巧,结合实例帮助快速上手进程管理。

一、进程的基本概念

进程(Process)是程序加载到内存后动态执行的实例,与静态的程序有着本质区别。程序是存储在磁盘上的可执行文件(如/bin/ls),仅包含指令和数据,不占用系统资源;而进程是程序运行起来后的"活实体",拥有独立的内存空间、CPU时间片和系统资源(如文件描述符),能够独立完成指令执行、资源申请与释放等操作。

一个程序可以对应多个进程,例如多次打开终端时,每个终端都会启动一个bash进程,这些进程共享bash程序的代码,但拥有各自独立的运行环境和资源,互不干扰。

二、进程的核心标识:PID与PPID

Linux系统中每个进程都有唯一的标识,用于区分不同进程、管理进程间的关系,核心标识为PID和PPID:

PID(Process ID,进程ID):由内核分配的唯一数字标识,范围通常为1~32768,是操作进程的核心依据,每个进程的PID在其生命周期内唯一,进程终止后PID会被内核回收,可重新分配给新进程。

PPID(Parent PID,父进程ID):标识创建当前进程的父进程,所有进程都有父进程,形成树形结构。例如用户登录后,bash进程是用户执行命令(如ls)的父进程。

特殊PID说明:PID=1的进程是init(或Systemd)进程,是所有进程的"祖先",负责系统初始化和进程管理,系统启动时首先启动该进程,后续所有进程都由它直接或间接创建。

三、进程的状态及转换

进程在生命周期中会根据执行情况和资源获取状态,处于不同的状态,通过ps命令的STAT字段可查看进程状态。Linux进程的核心状态分为5种,各状态间可根据触发条件相互转换,具体如下表所示:

状态符号 状态名称 含义与触发场景
R(Running) 运行态/就绪态 进程正在占用CPU执行,或处于就绪队列中等待CPU调度(Linux中"运行态"包含"就绪"逻辑),是进程的活跃状态之一。
S(Sleeping) 可中断睡眠态 进程等待某个事件完成(如IO操作、信号),事件发生或收到信号后会被唤醒,例如执行sleep 10命令后,进程会进入该状态。
D(Disk Sleep) 不可中断睡眠态 进程等待关键资源(如磁盘IO),不响应任何信号,仅当资源就绪后才能唤醒,目的是避免资源竞争导致数据损坏,此时无法通过kill命令终止进程。
T(Stopped) 停止态 进程被信号暂停,通常由Ctrl+Z快捷键或kill -STOP命令触发,可通过kill -CONT命令恢复运行,暂停期间不占用CPU资源。
Z(Zombie) 僵尸态 进程已终止(代码执行完毕),但父进程未调用wait()/waitpid()函数回收其PCB(进程控制块)资源,此时进程仅保留PID和退出状态,不占用CPU和内存,但过多会耗尽PID资源。

补充状态标识:<表示高优先级进程,N表示低优先级进程,+表示前台进程(与终端关联),s表示会话领导者(如shell进程),这些标识会附加在核心状态符号后,用于更精准地描述进程状态。

进程状态转换流程:父进程创建子进程后,子进程初始为就绪态(R);调度器分配CPU时间片后,进入运行态(R);进程等待资源时,进入睡眠态(S/D);收到暂停信号后,进入停止态(T);进程终止后,进入僵尸态(Z),经父进程回收后彻底消失。

四、常用进程管理命令(实操重点)

Linux提供了丰富的命令用于查看、控制、调度进程,以下是最常用、最实用的命令,结合示例说明其用法,便于直接上手实操:

(一)进程查看命令

用于查看进程的静态快照或动态状态,核心命令为ps和top,辅助命令有pstree、pgrep等。

  1. ps命令:静态查看进程快照(执行命令时的进程状态,不实时刷新)

    1. 常用选项组合1:ps aux(BSD风格),查看所有用户的所有进程,输出信息最全面,核心字段说明:

      • USER:进程所有者;PID:进程ID;%CPU:CPU占用率;%MEM:内存占用率;

      • VSZ:虚拟内存占用(KB);RSS:物理内存占用(KB);TTY:终端类型(?表示无终端关联,如守护进程);

      • STAT:进程状态;START:启动时间;TIME:累计CPU占用时间;COMMAND:启动命令。

    2. 常用选项组合2:ps -ef(标准Unix风格),查看所有进程,重点显示进程间的父子关系(PPID字段),便于追溯进程来源。

    3. 示例:查找nginx进程的PID和状态,执行ps aux | grep nginx;查看进程树关系,执行ps -ejH或ps -e --forest。

  2. top命令:动态实时监控进程(默认每3秒刷新一次),类似Windows任务管理器,可实时查看进程资源占用情况,适合排查高CPU、高内存进程。

    1. 常用操作:按P(大写)按CPU使用率排序;按M(大写)按内存使用率排序;按k终止指定PID的进程;按q退出监控。

    2. 示例:仅监控PID为1234的进程,执行top -p 1234;按内存占用排序监控,执行top -o %MEM。

  3. 辅助命令:pstree以树状图显示进程父子关系,pstree -p可显示每个进程的PID;pgrep按进程名查询PID,如pgrep nginx可快速获取所有nginx进程的PID。

(二)进程控制命令

用于终止、暂停、恢复进程,核心命令为kill、pkill,辅助命令有bg、fg、jobs等。

  1. kill命令:向进程发送信号,实现对进程的控制,核心是通过信号编号指定操作,常用信号如下表: 信号编号信号名称功能说明1SIGHUP挂起信号,常用于重启进程(如nginx重载配置),进程收到后会重新读取配置文件,不终止进程。9SIGKILL强制终止信号,进程无法忽略,用于强制杀死无响应的进程("必杀信号"),执行kill -9 PID即可。15SIGTERM终止信号(默认),进程可捕获并优雅退出(释放资源后终止),推荐优先使用,执行kill PID(默认发送该信号)即可。18SIGCONT继续信号,用于恢复被暂停的进程(如T状态进程),执行kill -18 PID即可。19SIGSTOP暂停信号,用于将进程切换为T状态,执行kill -19 PID即可,无法被进程忽略。

  2. pkill命令:按进程名、用户等属性批量发送信号,无需手动查询PID,适合批量控制进程。

    1. 示例:强制终止所有nginx进程,执行pkill -9 nginx;终止所有root用户的进程,执行pkill -u root。
  3. 作业控制命令(bg/fg/jobs):用于管理前台和后台进程,适合处理终端中运行的进程。

    1. jobs:查看当前终端的后台作业,显示作业编号和状态;

    2. bg %n:将第n个后台作业(%n中的n为作业编号)放到后台继续运行;

    3. fg %n:将第n个后台作业调到前台运行,例如fg %1将第一个后台作业调至前台。

(三)进程优先级调整命令

Linux内核通过调度器分配CPU时间片,优先级高的进程获得更多CPU资源,优先级通过Nice值和PRI值表示,核心调整命令为nice和renice。

  1. 优先级表示:

    1. Nice值:用户空间可见的优先级,范围为-20(最高)~19(最低),默认值为0,Nice值越小,进程优先级越高;

    2. PRI(Priority):内核内部的优先级,动态计算,与Nice值相关(PRI = PRI_BASE + Nice值,PRI_BASE通常为80),值越小优先级越高。

  2. nice命令:启动进程时指定优先级,格式:nice -n (Nice值) 命令。

    1. 示例:以Nice值-5(高优先级)启动脚本,执行nice -n -5 ./high_prio.sh;以低优先级启动程序,执行nice -n 10 ./app。
  3. renice命令:调整运行中进程的优先级,格式:renice (新Nice值) -p PID。

    1. 示例:将PID为1234的进程Nice值改为-10(提高优先级),执行renice -10 -p 1234;调整所有root用户进程的优先级,执行renice -5 -u root。

(四)特殊进程管理:守护进程与僵尸进程

  1. 守护进程(Daemon):在后台长期运行的特殊进程,用于提供系统服务(如sshd、httpd、crond),特点如下:

    1. 脱离终端(TTY字段为?),不受终端关闭影响;

    2. 通常以d结尾(如crond、named);

    3. 由systemd(或init)管理,系统启动时自动运行,关闭时自动终止;

    4. 示例:查看常见守护进程,执行ps aux | grep -E 'sshd|httpd|crond'。

  2. 僵尸进程处理:僵尸进程(Z状态)会残留PID,过多会耗尽PID资源,处理方法如下:

    1. 方法1:找到父进程(通过ps -ef | grep 僵尸进程PID,查看PPID字段),终止父进程(kill -9 父进程PID),僵尸进程会被init进程(PID=1)接管并回收;

    2. 方法2:重启系统,彻底回收所有僵尸进程(不推荐用于生产环境);

    3. 注意:无法直接终止僵尸进程(已终止,仅残留PCB),只能通过回收父进程实现清除。

五、实操案例(巩固练习)

结合上述命令,通过实际案例巩固进程管理操作,覆盖查看、控制、优先级调整等核心场景:

  1. 案例1:查看系统中CPU占用率最高的前10个进程,执行ps aux --sort=-%cpu | head -10;

  2. 案例2:后台运行一个脚本,执行./test.sh &,通过jobs查看后台作业,用fg %1调至前台,用Ctrl+Z暂停,再用bg %1恢复后台运行;

  3. 案例3:强制终止无响应的firefox进程,先通过pgrep firefox获取PID,再执行kill -9 PID,或直接执行pkill -9 firefox;

  4. 案例4:调整nginx进程(PID=1234)的优先级,将Nice值改为-5,执行renice -10 -p 1234;

  5. 案例5:查看系统中的僵尸进程,执行ps aux | awk '8=="Z" {print 0}',并通过终止父进程的方式清除。

六、注意事项与总结

kill -9命令是强制终止进程,会导致进程无法优雅释放资源(如关闭文件、释放内存),非必要不使用,优先使用kill PID(默认SIGTERM信号);

不可中断睡眠态(D状态)进程无法通过kill命令终止,需等待IO操作完成后自动唤醒,强行重启可能导致数据损坏;

Nice值调整范围为-20~19,普通用户只能将Nice值调大(降低优先级),root用户可任意调整;

进程管理的核心是"识别进程(PID/状态)→ 控制进程(终止/暂停/恢复)→ 优化进程(调整优先级)",熟练掌握ps、top、kill三个命令,可解决大部分日常进程管理需求。

本节课重点掌握进程的概念、状态及常用管理命令,实操是关键,建议多在Linux环境中练习命令使用,理解进程的生命周期和调度机制,为后续学习进程通信、服务管理打下基础。

相关推荐
sp_fyf_20242 小时前
【大语言模型】 语言模型学习什么以及何时学习?隐式课程假说
人工智能·学习·语言模型
星辰即远方2 小时前
UI学习2
学习·ui
cyber_两只龙宝2 小时前
【Oracle】Oracle之DQL中SELECT的基础使用
linux·运维·服务器·数据库·云原生·oracle
云栖梦泽2 小时前
Linux内核与驱动:10.平台总线platform
linux
Deitymoon2 小时前
linux——TCP多进程并发服务器
linux·服务器·tcp/ip
网络安全许木2 小时前
自学渗透测试第15天(基础复习与漏洞原理入门)
linux·网络安全·渗透测试·kali linux
Hello World . .2 小时前
linux驱动编程2 : uboot、Linux内核、rootfs来源及制作流程
linux·运维·服务器
拥抱AGI2 小时前
Qwen3.5开源矩阵震撼发布!从0.8B到397B,不同规模模型性能、显存、速度深度对比与选型指南来了!
人工智能·学习·程序员·开源·大模型·大模型训练·qwen3.5
.柒宇.2 小时前
Ansible自动化运维实战笔记:环境搭建与四大核心模块详解
运维·自动化·ansible