一、程序与进程的关系

1.1 程序与进程

  • 程序:存放在磁盘上的静态可执行文件(代码+数据),本身不运行
  • 进程:程序被加载到内存、由CPU执行的动态实例,是操作系统资源分配的最小单位
  • 程序是静态的文件;进程是程序运行时的动态实体,拥有独立PID,占用系统资源。一个程序可以同时产生多个进程

1.2 父进程与子进程

  • 父进程通过fork创建子进程;子进程拥有独立PID,集成父进程资源,内存采用写时复制;父进程负责回收子进程,父死则子金山城被systemd收养(命令实操查看:ps -ef,PPID列就是父进程)
核心要点
  • 父进程调用 fork(),复制自身生成子进程;子进程会继承父进程大部分资源(内存、文件描述符等),拥有独立 PID。
  • PID 关系:子进程有自己 PID;子进程的 PPID(父进程 ID)= 父进程 PID。
  • 父子进程内存:fork 瞬间拷贝,之后各自独立,互不影响(写时复制 COW)。
  • 父进程可以等待子进程退出(wait() / waitpid()),回收子进程资源;
  • 如果父进程提前退出,子进程会被systemd(PID=1)收养。
两个特殊状态
  • 僵尸进程:子进程退出,但父进程没有回收它的退出信息,残留进程描述符。
  • 孤儿进程:父进程先退出,子进程被 PID=1 接管。

1.3 层次:进程>线程>协程

  • 进程(资源容器):操作系统资源分配的最小单位,拥有独立内存空间,进程之间相互隔离;一个进程至少有一个线程
  • 线程(进程里的执行单元):进程内CPU调度的最小单位,隶属于进程,同进程内所有线程共享进程的内存与资源;线程切换由操作系统内核完成,有一定开销
  • 协程(线程内部手动切换到清凉任务):运行在线程内部,由应用代码在用户态实现的轻量级任务;操作系统干知不道协程,切换无需内核参与,开销极小,一个线程可承载多个协程

二、查看进程信息

2.1 ps:查看系统中的进程

  • ps -ef:以标准格式显示所有进程
  • ps -aux:显示所有进程,包括其他用户的进程
  • ps -aux | grep [进程名]:通过管道符和grep命令过滤进程

2.2 ps 输出字段详解

输出字段含义大白话
USER启动该进程的用户谁开的这个程序
PID进程编号进程的身份证号,杀进程靠它
%CPUCPU 占用率占了多少 CPU 算力
%MEM内存占用率占了多少内存
VSZ虚拟内存程序 "申请" 的内存(不一定是真用)
RSS物理内存实实在在占的内存条空间
STAT进程状态这个进程正在干什么(重点)
START启动时间什么时候开始跑的
TIME累计 CPU 时间一共占用了多少 CPU 时间
COMMAND启动命令是哪个命令把它拉起来的
STAT 进程状态
STAT进程状态含义大白话
RRunning 运行中正在跑 / 准备跑
SSleeping 睡眠没事干在休息,叫一声就能起来
D不可中断睡眠正在读写磁盘,不能随便叫醒
TStopped 停止被暂停了,暂时不干活
ZZombie 僵尸程序结束了,但父进程没回收,占点资源
STAT 额外标记
STAT额外标记含义大白话
<高优先级CPU 优先给它分配时间,干活插队
N低优先级优先级低,CPU 有空才轮到它
l多线程进程这个程序开了多个线程(l 是 L 小写 L)
s会话首进程是一组进程的老大(会话组长)
+前台进程在终端前台运行,按Ctrl+C可以终止它

三、动态查看进程信息

3.1 top 命令:查看实时的进程和资源占用情况

常用快捷键
  • P:按CPU使用率排序
  • M:按内存使用量排序
  • T:按时间顺序
  • q:退出top
  • 1:查看几个CPU
top 输出字段
输出字段含义
PID进程 ID(进程的身份证号)
USER启动该进程的用户
%CPU进程占用的 CPU 百分比
%MEM进程占用的内存百分比
TIME+进程累计使用的 CPU 时间
COMMAND执行的命令

四、pgrep 命令查询进程信息

  • -l:可同时输出对应的进程名以及PID
  • -U:查询特定用户的进程
  • -t:查询在特定终端运行的进程

五、pstree 命令以树形结构列出进程信息

  • -p:同时列出对应的PID号
  • -u:列出对应的用户名
  • -a:列出完整的命令信息

六、进程的启动方式

分类方式含义命令 / 写法适用场景
手工启动前台终端被占用,程序跑完才能敲下条命令直接输命令(默认)快速任务
后台程序放后台跑,终端继续可用命令末尾加 &耗时任务
调度启动一次性到指定时间执行一次at 时间定时跑一次
周期性按时间重复执行crontab每日备份 / 定时任务

七、进程前后台的调度

命令 / 快捷键作用大白话
Ctrl+Z把前台正在跑的进程暂停,挂入后台临时暂停任务,放到后台,任务停住不继续跑
jobs查看当前终端里所有后台任务jobs -l 同时显示任务 PID查看后台有哪些暂停的任务,带任务编号
bg 任务号后台恢复运行(Background)把暂停的后台任务,在后台继续跑
fg 任务号切回前台运行(Foreground)把后台任务拿回前台,终端继续等待它执行

八、kill:终止进程的运行

命令 / 快捷键作用说明示例
Ctrl+C中断前台进程直接结束当前前台正在跑的程序前台执行命令时按 Ctrl+C
kill PID优雅终止进程(信号 15)给进程发退出通知,进程做完收尾工作再关闭,优先使用kill 1234
kill -9 PID强制杀死进程(信号 9)立刻强行干掉,不给进程保存、清理机会;尽量少用kill -9 1234
killall 进程名根据进程名批量杀进程不用找 PID,把同名所有进程全部终止killall vim
pkill根据属性杀进程(用户名 / 终端 / 进程名)按条件批量匹配进程pkill -u hackli

九、计划任务管理

9.1 at 和 crontab

类型命令作用常用操作
一次性任务at指定时间只执行一次atq:查看待执行任务atrm 任务号:删除任务输入任务后按Ctrl+D提交
周期性任务crontab按周期重复执行(分 时 日 月 周)crontab -e:编辑定时任务crontab -l:查看任务crontab -r:清空全部任务crontab -u 用户名:root 管理其他用户任务

9.2 crontab 时间格式

分(0-59)、时(0-23)、日(1-31)月份(1-12)星期(0-6,0为周日)命令

  • * :代表任意时间
  • - :连续范围,1-4=1,2,3,4
  • , :不连续多值,1,3,5
  • / :间隔,*/3每隔3单位
  • 50 7 * * * systemctl start sshd.service :每天7点50启动sshd服务

十、crond 服务管理

crond 是底层服务,必须保证 crond 服务开启,定时任务才会生效

  • systemctl start crond 启动定时服务
  • systemctl status croud 查看运行状态
  • systemctl enable crond 设置开机自启
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐