编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • Android提升进阶

  • iOS开发和进阶

  • Web开发和进阶

  • Linux应用开发

    • README
    • QML基础入门

    • QT核心库实践

    • Linux实践开发

      • README
      • Linux开发指引
      • 崩溃监听实践
      • Linux应用指令
        • 1.查询运行进程
        • 2.查询指定进程
        • 3.TOP查询信息
        • 4.杀死进程操作
        • 5.查看进程资源
        • 01.查询运行的进程
          • 1.1 查看所有进程
        • 02.top显示系统进程
          • 2.1 top查询信息
          • 2.2 top分为两部分
          • 2.3 top信息分析
          • 2.4 常用选项
        • 04.查看某个进程信息
          • 4.1 查看某个进程
        • 05.终止某个进程
          • 5.1 查找进程信息
          • 5.2 终止进程
          • 5.3 强制终止进程
          • 5.4 查找进程启动路径
        • 6.Linux文件系统
      • 应用重启策略
      • 守护进程保活
      • 脚本进程保活
      • 应用启动的原理
      • LVGL设计原理
      • Qt应用保活方案设计
  • Apps
  • Linux应用开发
  • Linux实践开发
杨充
2025-08-20
目录

Linux应用指令

# Linux应用指令

  • 1.查询运行进程
  • 2.查询指定进程
  • 3.TOP查询信息
  • 4.杀死进程操作
  • 5.查看进程资源
  • 6.Linux文件系统

# 1.查询运行进程

原理:ps 读取 /proc 虚拟文件系统。Linux 内核为每个进程在 /proc/{pid}/ 下维护一组文件(status、stat、cmdline、fd/ 等),ps 解析这些文件并格式化输出。

# 查看当前终端关联的进程
ps

# 查看所有进程(BSD风格,最常用)
ps aux

# 查看所有进程(System V风格)
ps -ef

# 以树形结构展示进程父子关系
ps auxf
# 或
pstree -p
1
2
3
4
5
6
7
8
9
10
11
12
13

ps aux 各列含义:

列 含义
USER 进程所属用户
PID 进程ID(内核分配,/proc/{pid})
%CPU CPU使用率(采样间隔内的平均值)
%MEM 物理内存占比(RSS / 总内存)
VSZ 虚拟内存大小(KB),包括共享库、swap、未实际分配的页
RSS 常驻物理内存(KB),实际占用的物理页帧
STAT 进程状态码
START 启动时间
COMMAND 完整命令行(来自 /proc/{pid}/cmdline)

进程状态码(STAT)详解:

状态 含义 内核原理
R Running/Runnable 在CPU运行队列中(task_struct 在 rq 上)
S Sleeping (可中断) 等待事件(IO/信号),在等待队列中,收到信号可唤醒
D Disk sleep (不可中断) 等待磁盘IO,不响应信号,kill -9 也无法杀死
T Stopped 收到 SIGSTOP/SIGTSTP 信号暂停
Z Zombie 进程已退出但父进程未 wait() 回收,task_struct 残留
I Idle 内核空闲线程

附加标识:< 高优先级、N 低优先级、s session leader、l 多线程、+ 前台进程组

# 2.查询指定进程

# 按名称模糊搜索(最常用)
ps aux | grep <进程名>
# 例如
ps aux | grep iotservice

# 排除 grep 自身
ps aux | grep [i]otservice
# 或
ps aux | grep iotservice | grep -v grep

# pgrep:专门的进程名搜索工具,返回PID
pgrep -a iotservice        # -a 显示完整命令行
pgrep -f "iotservice"      # -f 匹配完整命令行(不只是进程名)
pgrep -l -u root           # 查看 root 用户的所有进程

# pidof:精确匹配进程名,返回PID
pidof iotservice

# 查看进程的详细信息
cat /proc/<pid>/status      # 进程状态信息(内存、线程数等)
cat /proc/<pid>/cmdline     # 启动命令行(\0分隔)
ls -la /proc/<pid>/fd/     # 打开的文件描述符
cat /proc/<pid>/maps        # 虚拟内存映射
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

原理差异:

  • ps aux | grep:ps 枚举所有 /proc/{pid},输出全部进程,grep 在文本层面过滤——两次遍历
  • pgrep:直接遍历 /proc,内部匹配进程名/命令行——一次遍历,效率更高
  • pidof:使用 /proc/{pid}/stat 的第二个字段精确匹配进程名

# 3.TOP查询信息

原理:top 周期性(默认3秒)读取 /proc/stat(全局CPU)、/proc/meminfo(内存)、/proc/{pid}/stat(各进程CPU/内存),计算两次采样间的差值得到使用率。

top                    # 交互式实时监控
top -b -n 1            # 批处理模式,输出一次(适合脚本/日志)
top -p <pid>           # 只监控指定PID
top -H -p <pid>        # 查看指定进程的所有线程
1
2
3
4

头部信息解读:

top - 14:32:01 up 5 days, 3:21, 1 user, load average: 0.52, 0.38, 0.35
Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.2 us, 2.1 sy, 0.0 ni, 92.3 id, 0.1 wa, 0.0 hi, 0.3 si, 0.0 st
MiB Mem:  3934.2 total, 1024.5 free, 1856.3 used, 1053.4 buff/cache
MiB Swap:  2048.0 total, 2048.0 free,    0.0 used. 1834.7 avail Mem
1
2
3
4
5
字段 含义 原理
load average 1/5/15分钟平均负载 /proc/loadavg,表示运行队列+不可中断等待进程数的指数加权平均
us 用户态CPU 应用程序代码执行时间占比
sy 内核态CPU 系统调用、内核代码执行时间占比
ni nice值调整后的用户态 被 nice/renice 调整过优先级的进程
id 空闲 CPU空转比例
wa IO等待 CPU等待磁盘IO完成的时间,高wa说明磁盘瓶颈
hi 硬中断 硬件中断处理时间(网卡、磁盘控制器等)
si 软中断 内核软中断处理(网络包处理、定时器等)
st 虚拟化偷取 虚拟机被hypervisor抢占的CPU时间

交互快捷键:

按键 功能
M 按内存排序
P 按CPU排序(默认)
T 按累计时间排序
H 切换线程/进程视图
1 展开每个CPU核心的独立统计
c 显示完整命令行
k 交互式杀死进程(输入PID和信号)
f 选择显示的列
q 退出

htop(增强版):

htop                   # 彩色交互式,支持鼠标、树形视图
htop -p <pid>          # 监控指定进程
1
2

# 4.杀死进程操作

原理:kill 是系统调用 kill(pid, sig) 的封装,向目标进程发送信号(signal)。内核在进程的 task_struct->pending 中设置信号位,进程在下次从内核态返回用户态时检查并处理信号。

# 发送默认信号 SIGTERM(15)—— 优雅终止
kill <pid>
kill -15 <pid>

# 强制杀死 SIGKILL(9)—— 不可捕获,内核直接回收
kill -9 <pid>

# 按进程名杀死
killall <进程名>
killall -9 iotservice

# pkill:支持模式匹配
pkill -f "iotservice"
pkill -9 -f "iotservice"
1
2
3
4
5
6
7
8
9
10
11
12
13
14

常用信号详解:

信号 编号 可捕获 含义 使用场景
SIGHUP 1 是 挂起 通知守护进程重载配置
SIGINT 2 是 中断 等同 Ctrl+C
SIGQUIT 3 是 退出+core dump 调试用,生成核心转储
SIGKILL 9 否 强制杀死 最后手段,进程无法善后
SIGTERM 15 是 优雅终止 首选,允许进程清理资源
SIGSTOP 19 否 暂停 调试/冻结进程
SIGCONT 18 是 恢复 恢复被STOP的进程
SIGUSR1 10 是 用户自定义1 应用自定义行为(如日志级别切换)
SIGUSR2 12 是 用户自定义2 应用自定义行为

最佳实践:先 kill <pid>(SIGTERM),等待几秒,若进程未退出再 kill -9 <pid>(SIGKILL)。因为 SIGTERM 允许进程执行析构函数、关闭文件描述符、释放锁等清理操作。

杀不掉的进程:

  • D 状态(不可中断睡眠):等待IO完成,kill -9 也无效,需要解决底层IO问题(磁盘故障/NFS挂载卡死)
  • Z 状态(僵尸进程):进程已死,只是 task_struct 未回收,需要杀死父进程或让父进程调用 wait()

# 5.查看进程资源

# 查看进程打开的文件/网络连接
lsof -p <pid>

# 查看进程监听的端口
lsof -i -P -n | grep <进程名>
ss -tlnp | grep <进程名>
netstat -tlnp | grep <进程名>

# 查看进程的线程
ps -T -p <pid>            # 列出所有线程
ls /proc/<pid>/task/       # 直接查看线程ID目录

# 查看进程的内存映射
pmap <pid>
cat /proc/<pid>/smaps      # 详细的内存段信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 01.查询运行的进程

ps 命令用于显示当前运行的进程。

# 1.1 查看所有进程

ps aux
1
  • a:显示所有用户的进程。
  • u:以用户友好的格式显示。
  • x:显示没有控制终端的进程。

查看特定用户的进程

ps -u <username>
1

例如,查看 root 用户的进程:

ps -u root
1

# 02.top显示系统进程

top 是 Linux 中一个非常强大的实时系统监控工具,用于查看系统的运行状态、进程信息以及资源使用情况。

# 2.1 top查询信息

top
1
  • 按 q 退出。
  • 按 k 终止某个进程(需要输入进程 PID)。
  • 按 Shift + P 按 CPU 使用率排序。
  • 按 Shift + M 按内存使用率排序。

# 2.2 top分为两部分

top 界面分为两部分:

  1. 顶部区域:显示系统的整体状态。
  2. 进程列表:显示各个进程的详细信息。
top - 11:07:41 up 1 day, 15:14,  0 users,  load average: 0.78, 0.43, 0.26
Tasks: 136 total,   1 running,  75 sleeping,   0 stopped,   0 zombie
%Cpu0  :   4.1/10.8   15[||||||||                                             ]q
%Cpu1  :   4.0/9.3    13[|||||||                                              ]
GiB Mem : 12.4/0.878    [                                                     ]
GiB Swap:  0.0/0.000    [                                                     ]

PID USER      PR  NI    VIRT    RES  %CPU %MEM     TIME+ S COMMAND           
1 root      20   0    2.3m   0.4m   0.0  0.0   0:00.44 S init              
108 root      20   0    2.3m   0.4m   0.0  0.0   0:00.05 S  `- syslogd       
110 root      20   0    2.3m   0.4m   0.0  0.0   0:00.05 S  `- klogd         
126 root      20   0    3.0m   2.0m   0.0  0.2   0:00.24 S  `- udevd         
531 dbus      20   0    2.4m   1.3m   0.0  0.1   0:00.00 S  `- dbus-daemon   
537 root      20   0    1.8m   1.2m   0.0  0.1   0:00.23 S  `- rpcbind       
583 root      20   0    2.1m   1.5m   0.0  0.2   0:05.10 S  `- dhcpcd        
591 root      20   0    7.9m   2.6m   0.0  0.3   0:50.23 S  `- ntpd          
594 root      20   0    2.7m   1.8m   0.0  0.2   0:00.01 S  `- watchdog_palm+
604 root      20   0  424.2m  73.0m   4.6  8.1 104:48.07 S      `- yt-palm   
2746 root      20   0    2.3m   0.4m   0.0  0.0   0:00.00 S          `- sh    
2747 root      20   0    4.5m   0.7m   0.0  0.1   0:00.00 S              `- p+
600 avahi     20   0    2.9m   1.5m   0.0  0.2   0:02.43 S  `- avahi-daemon  
639 root      20   0    1.9m   0.1m   0.0  0.0   0:00.00 S  `- dropbear      
645 root      20   0    2.1m   0.4m   0.0  0.0   0:00.00 S  `- fcgiwrap      
649 root      20   0   13.0m   1.9m   0.0  0.2   0:00.00 S  `- nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 2.3 top信息分析

顶部区域

  • 第一行:系统时间、运行时间、用户数、负载平均值(1 分钟、5 分钟、15 分钟)。

    top - 10:00:01 up 1 day,  2:30,  3 users,  load average: 0.15, 0.10, 0.05
    
    1
    • 10:00:01:当前时间。
    • up 1 day, 2:30:系统已运行时间。
    • 3 users:当前登录用户数。
    • load average:系统负载(1 分钟、5 分钟、15 分钟的平均值)。
  • 第二行:任务信息。

    Tasks: 123 total,   1 running, 122 sleeping,   0 stopped,   0 zombie
    
    1
    • 123 total:总进程数。
    • 1 running:正在运行的进程数。
    • 122 sleeping:睡眠中的进程数。
    • 0 stopped:停止的进程数。
    • 0 zombie:僵尸进程数。
  • 第三行:CPU 使用情况。

    %Cpu(s):  1.5 us,  0.5 sy,  0.0 ni, 97.5 id,  0.5 wa,  0.0 hi,  0.0 si,  0.0 st
    
    1
    • us:用户空间占用 CPU 百分比。
    • sy:内核空间占用 CPU 百分比。
    • ni:调整优先级的进程占用 CPU 百分比。
    • id:空闲 CPU 百分比。
    • wa:等待 I/O 操作的 CPU 百分比。
    • hi:硬件中断占用 CPU 百分比。
    • si:软件中断占用 CPU 百分比。
    • st:虚拟机偷取的 CPU 百分比。
  • 第四行:内存使用情况。

    MiB Mem :  8000.0 total,  2000.0 free,  3000.0 used,  3000.0 buff/cache
    
    1
    • total:总内存。
    • free:空闲内存。
    • used:已用内存。
    • buff/cache:缓存和缓冲区内存。
  • 第五行:交换分区(Swap)使用情况。

    MiB Swap:  2000.0 total,  1500.0 free,   500.0 used.  4000.0 avail Mem
    
    1
    • total:总交换分区大小。
    • free:空闲交换分区大小。
    • used:已用交换分区大小。
    • avail Mem:可用内存。

进程列表

进程列表默认按 CPU 使用率排序,每列的含义如下:

PID   USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1234  root      20   0  123456  78900  12345 S   1.5   0.5   0:10.00 process_name
1
2
  • PID:进程 ID。
  • USER:进程所有者。
  • PR:进程优先级。
  • NI:进程的 nice 值(优先级调整值)。
  • VIRT:进程使用的虚拟内存总量。
  • RES:进程使用的物理内存大小。
  • SHR:进程使用的共享内存大小。
  • S:进程状态(R=运行,S=睡眠,Z=僵尸,D=不可中断睡眠)。
  • %CPU:进程占用的 CPU 百分比。
  • %MEM:进程占用的内存百分比。
  • TIME+:进程使用的 CPU 时间总计。
  • COMMAND:进程的命令或名称。

# 2.4 常用选项

  • -d:设置刷新间隔(秒)。
    top -d 2
    
    1
  • -p:监控特定 PID。
    top -p 1234
    
    1
  • -u:监控特定用户的进程。
    top -u username
    
    1
  • -n:设置刷新次数后退出。
    top -n 5
    
    1

# 04.查看某个进程信息

# 4.1 查看某个进程

使用 ps aux | grep palm 命令可以查找与 palm 相关的进程。以下是命令的解释和可能的输出:

ps aux | grep palm
1

比如

[root@RV1126_RV1109:/]# ps aux | grep palm
root      594  0.0  0.1   2764  1808 ?        S    Aug18   0:00 /bin/bash /userdata/palmApp/watchdog_palmapp.sh
root      604  4.4  8.1 426184 74756 ?        SLl  Aug18 103:57 /userdata/yt-palm/yt-palm
root     2127  0.0  0.0   2392   400 pts/0    S+   10:49   0:00 grep palm
1
2
3
4

命令解释

  • ps aux:列出所有正在运行的进程。
  • grep palm:过滤出包含 palm 的行。

示例输出

user     12345  0.0  0.1  123456  7890 pts/0    S+   10:00   0:00 /usr/bin/palm-service
user     12346  0.0  0.0   1234   567 pts/1    S+   10:01   0:00 grep --color=auto palm
1
2
  1. 第一行:与 palm 相关的进程(例如 palm-service)。

    • 12345:进程 ID(PID)。
    • 0.0:CPU 使用率。
    • 0.1:内存使用率。
    • 123456:虚拟内存大小。
    • 7890:物理内存大小。
    • pts/0:进程关联的终端。
    • S+:进程状态(S 表示睡眠,+ 表示前台进程)。
    • 10:00:进程启动时间。
    • 0:00:进程占用 CPU 时间。
    • /usr/bin/palm-service:进程的命令或路径。
  2. 第二行:grep 命令本身。

    • 这是 grep 进程,通常可以忽略。

# 05.终止某个进程

# 5.1 查找进程信息

查找进程详细信息

ps -fp <PID>
1

例如:

ps -fp 12345
1

# 5.2 终止进程

终止进程:

kill <PID>
1

例如:

kill 12345
1

# 5.3 强制终止进程

强制终止进程:

kill -9 <PID>
1

# 5.4 查找进程启动路径

查找进程启动路径:

ls -l /proc/<PID>/exe
1

例如:

ls -l /proc/12345/exe
1

# 6.Linux文件系统

文件系统指的是 Linux 内部的文件布局。

任何 Linux 系统,顶部总是一个根目录,写成/,其他目录都是根目录的子目录。下面就是根目录下的一些主要的子目录。

/root是根用户的主目录,根用户的文件都会放在这个目录。

/home是其他用户的主目录,每个用户在/home下面都会有自己的主目录。比如,用户ruanyf的主目录就是/home/ruanyf。用户自己的主目录可以用快捷方式~或$HOME访问。每个用户只能打开自己的主目录,不能访问其他用户的子目录。

/bin和sbin这两个目录,都包含应用程序和可执行命令的二进制文件。区别是/bin包含系统基本操作所需的二进制文件(例如 ls、cp、mv、mkdir 等命令),而/sbin包含管理系统所需的二进制文件(例如 fdisk)。

/usr存放用户自己安装的程序。如果你自己安装了一个程序,它的二进制命令一般会放在/usr/bin这个目录,它的库会放在/usr/lib目录。

/etc存放系统和应用程序的配置文件。比如,网络配置、用户信息和系统设置都可以在这个目录中找到。

/opt存放系统可选的安装文件。比如,安装了 MS Edge 浏览器,它就会放在/opt/microsoft,里面包含了它运行所需的所有库和可执行文件。

/lib包含系统的应用程序所需的所有基本库。

/boot包含引导过程所需的所有文件,包括内核、初始 RAM 磁盘和引导加载程序的配置文件。

/media是磁盘(包括光盘驱动器)的安装和访问位置。如果插入 USB 驱动器,它就会安装在/media下面的子目录。

/mnt类似于/media,但只用在挂载其他文件系统,比如网络文件系统。

/proc包含进程信息的文件。在这个目录中,你会看到一组有编号的子目录,每个子目录关联一个正在运行的进程,子目录编号就是进程号。

/run包含运行时数据、一些系统日志、进程 ID 和临时文件。

/srv保存各种服务端的数据,例如 Web 和 FTP 服务器,仅当安装了此类服务端时才使用此目录。比如,你启动了 FTP 服务器,可以在此目录中创建一个子目录,存放上传和下载的文件。如果你的电脑不用作服务器,只用作桌面电脑,那么该目录为空。

/tmp存放临时文件(由应用程序创建和使用),系统会定期自动删除里面的文件。

/var存放会不断变化的一些文件,比如系统日志、邮件、Web 服务器的文档根目录。如果系统出现问题,可以查看/var/log里面的日志。

上次更新: 2026/06/10, 11:13:41
崩溃监听实践
应用重启策略

← 崩溃监听实践 应用重启策略→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式