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
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 # 虚拟内存映射
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> # 查看指定进程的所有线程
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
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> # 监控指定进程
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"
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 # 详细的内存段信息
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 01.查询运行的进程
ps 命令用于显示当前运行的进程。
# 1.1 查看所有进程
ps aux
a:显示所有用户的进程。u:以用户友好的格式显示。x:显示没有控制终端的进程。
查看特定用户的进程
ps -u <username>
例如,查看 root 用户的进程:
ps -u root
# 02.top显示系统进程
top 是 Linux 中一个非常强大的实时系统监控工具,用于查看系统的运行状态、进程信息以及资源使用情况。
# 2.1 top查询信息
top
- 按
q退出。 - 按
k终止某个进程(需要输入进程 PID)。 - 按
Shift + P按 CPU 使用率排序。 - 按
Shift + M按内存使用率排序。
# 2.2 top分为两部分
top 界面分为两部分:
- 顶部区域:显示系统的整体状态。
- 进程列表:显示各个进程的详细信息。
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
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.05110:00:01:当前时间。up 1 day, 2:30:系统已运行时间。3 users:当前登录用户数。load average:系统负载(1 分钟、5 分钟、15 分钟的平均值)。
第二行:任务信息。
Tasks: 123 total, 1 running, 122 sleeping, 0 stopped, 0 zombie1123 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 st1us:用户空间占用 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/cache1total:总内存。free:空闲内存。used:已用内存。buff/cache:缓存和缓冲区内存。
第五行:交换分区(Swap)使用情况。
MiB Swap: 2000.0 total, 1500.0 free, 500.0 used. 4000.0 avail Mem1total:总交换分区大小。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
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 21-p:监控特定 PID。top -p 12341-u:监控特定用户的进程。top -u username1-n:设置刷新次数后退出。top -n 51
# 04.查看某个进程信息
# 4.1 查看某个进程
使用 ps aux | grep palm 命令可以查找与 palm 相关的进程。以下是命令的解释和可能的输出:
ps aux | grep palm
比如
[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
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
2
第一行:与
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:进程的命令或路径。
第二行:
grep命令本身。- 这是
grep进程,通常可以忽略。
- 这是
# 05.终止某个进程
# 5.1 查找进程信息
查找进程详细信息
ps -fp <PID>
例如:
ps -fp 12345
# 5.2 终止进程
终止进程:
kill <PID>
例如:
kill 12345
# 5.3 强制终止进程
强制终止进程:
kill -9 <PID>
# 5.4 查找进程启动路径
查找进程启动路径:
ls -l /proc/<PID>/exe
例如:
ls -l /proc/12345/exe
# 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里面的日志。