主题
Linux 进程管理命令 - 进程监控与控制系统
1. 进程查看命令
1.1 ps - 显示进程状态
ps 命令用于显示当前进程的状态快照,是最基本也是最常用的进程查看工具。
语法:
bash
ps [选项]常用选项组合:
ps aux:显示所有用户的进程,包括详细信息ps -ef:显示所有进程的完整格式ps -e --forest:以树状结构显示进程关系ps -l:显示当前 shell 相关的进程
常用输出列说明:
PID:进程 IDPPID:父进程 IDUSER:进程所有者%CPU:CPU 使用率%MEM:内存使用率VSZ:虚拟内存大小(KB)RSS:物理内存使用量(KB)STAT:进程状态代码START:进程启动时间TIME:累计 CPU 时间COMMAND:启动进程的命令
示例:
bash
# 显示所有进程的详细信息
ps aux
# 显示所有进程,并以树状结构展示
ps -e --forest
# 查找特定进程
ps aux | grep nginx
# 显示进程的线程信息
ps -eLf
# 按内存使用率排序显示进程
ps aux --sort=-%mem
# 按 CPU 使用率排序显示进程
ps aux --sort=-%cpu1.2 top - 动态监控进程
top 命令用于动态显示系统中各个进程的资源占用状况,默认以 CPU 使用率排序,是一个交互式的进程监控工具。
语法:
bash
top [选项]常用选项:
-d, --delay SECONDS:设置刷新间隔(秒)-n, --iterations NUMBER:设置刷新次数后退出-p, --pid PIDLIST:只监视指定的进程 ID-u, --user USERNAME:只监视指定用户的进程
交互式命令:
h:显示帮助信息k:终止指定 PID 的进程r:修改进程的 nice 值M:按内存使用率排序P:按 CPU 使用率排序T:按累计时间排序1:显示所有 CPU 核心的使用情况q:退出 top
示例:
bash
# 启动 top,每 2 秒刷新一次
top -d 2
# 监控特定进程
top -p 123,456
# 监控特定用户的进程
top -u nginx
# 刷新 10 次后退出
top -n 101.3 htop - 增强版进程监控
htop 是 top 的增强版本,提供了彩色界面、更丰富的交互功能和更友好的用户体验。
语法:
bash
htop [选项]常用选项:
-d, --delay DELAY:设置刷新延迟(10 秒的分数)-C, --no-color:不使用颜色-p, --pid PID,PID...:只显示指定 PID 的进程-u, --user USERNAME:只显示指定用户的进程
交互式命令:
F1:显示帮助F2:进入设置菜单F3:搜索进程F4:过滤器设置F5:切换树状视图F7/F8:调整进程优先级F9:发送信号给进程F10:退出 htopk:终止进程
示例:
bash
# 启动 htop
top
# 显示特定用户的进程
top -u apache
# 只显示特定进程
top -p 12341.4 pstree - 树形显示进程关系
pstree 命令用于以树状结构显示进程之间的关系,清晰展示进程的层级结构。
语法:
bash
pstree [选项] [pid|user]常用选项:
-a:显示每个进程的完整命令行-c:不合并相同名称的子树-h:高亮显示当前进程及其父进程-n:按 PID 而不是名称排序-p:显示每个进程的 PID-u:显示用户切换
示例:
bash
# 显示所有进程的树状结构
pstree
# 显示进程的 PID 和完整命令行
pstree -ap
# 显示特定用户的进程树
pstree -u username
# 显示特定进程及其子进程
pstree 12341.5 pgrep/pkill - 进程查找与信号发送
pgrep 命令用于根据进程名或其他属性查找进程 ID,pkill 则根据这些条件向匹配的进程发送信号。
语法:
bash
pgrep [选项] 模式
pkill [选项] 模式常用选项:
-f:匹配完整的命令行-l:列出进程名和 PID-u:仅匹配指定用户的进程-x:精确匹配进程名-o:返回最旧的(最先启动的)进程-n:返回最新的(最后启动的)进程
示例:
bash
# 查找名为 nginx 的进程
pgrep nginx
# 查找名为 nginx 的进程,并显示进程名和 PID
pgrep -l nginx
# 查找包含特定字符串的进程
pgrep -f "nginx -g"
# 终止所有 nginx 进程
pkill nginx
# 向指定用户的进程发送信号
pkill -u www-data
# 精确匹配进程名
pgrep -x bash2. 进程控制命令
2.1 kill - 发送信号给进程
kill 命令用于向一个或多个进程发送信号,最常用于终止进程。
语法:
bash
kill [选项] 进程 ID...常用信号:
1,HUP:挂起信号,通常用于重新加载配置2,INT:中断信号,相当于 Ctrl+C9,KILL:强制终止信号,不能被捕获或忽略15,TERM:终止信号,默认值,允许进程进行清理18,CONT:继续信号,恢复暂停的进程19,STOP:暂停信号,不能被捕获或忽略20,TSTP:终端暂停信号,相当于 Ctrl+Z
选项:
-l:列出所有可用的信号名称-s, --signal SIGNAL:指定要发送的信号
示例:
bash
# 发送默认的终止信号(SIGTERM)
kill 1234
# 强制终止进程(SIGKILL)
kill -9 1234
# 或
kill -KILL 1234
# 重新加载进程配置(SIGHUP)
kill -HUP 1234
# 暂停进程(SIGSTOP)
kill -STOP 1234
# 继续进程(SIGCONT)
kill -CONT 1234
# 终止多个进程
kill 1234 5678
# 列出所有可用信号
kill -l2.2 killall - 按名称终止进程
killall 命令用于按进程名称终止进程,而不是 PID。
语法:
bash
killall [选项] 进程名...常用选项:
-e, --exact:精确匹配进程名-I, --ignore-case:忽略大小写-i, --interactive:交互式,在终止前确认-r, --regexp:将名称视为正则表达式-s, --signal SIGNAL:指定要发送的信号-u, --user USER:仅终止指定用户的进程
示例:
bash
# 终止所有名为 nginx 的进程
killall nginx
# 强制终止所有名为 apache2 的进程
killall -9 apache2
# 交互式终止进程
killall -i firefox
# 仅终止特定用户的进程
killall -u john firefox
# 使用正则表达式匹配进程名
killall -r 'firefox.*'2.3 nice/renice - 调整进程优先级
nice 命令用于启动具有特定优先级(nice 值)的进程,renice 命令用于修改正在运行进程的优先级。
nice 值范围:-20(最高优先级)到 19(最低优先级)
语法:
bash
nice [选项] [命令]
renice [优先级] [-p] [PID]...选项:
-n, --adjustment=N:设置 nice 值的调整量(默认为 10)
示例:
bash
# 以默认 nice 值 10 启动进程
nice ./my_script.sh
# 以特定 nice 值启动进程
nice -n 5 ./my_script.sh
# 或
nice -5 ./my_script.sh
# 以高优先级(低 nice 值)启动进程
nice --adjustment=-10 ./important_process
# 修改正在运行进程的优先级
renice 5 -p 1234
# 修改多个进程的优先级
renice 10 -p 1234 5678
# 修改用户所有进程的优先级
renice 15 -u john2.4 nohup - 忽略挂断信号
nohup 命令用于在后台运行命令,使其忽略挂断信号(SIGHUP),即使终端关闭也能继续运行。
语法:
bash
nohup 命令 [参数]... [&]示例:
bash
# 后台运行命令,输出重定向到 nohup.out
nohup ./long_running_script.sh &
# 自定义输出文件
nohup ./script.sh > custom.log 2>&1 &
# 查看 nohup 运行的进程
ps aux | grep nohup2.5 timeout - 设置命令超时时间
timeout 命令用于运行命令并在指定时间后终止它。
语法:
bash
timeout [选项] 时间 命令 [参数]...常用选项:
-s, --signal=信号:指定终止命令时发送的信号-k, --kill-after=时间:如果命令没有响应第一个信号,等待指定时间后发送 SIGKILL
时间格式:
s:秒(默认)m:分钟h:小时d:天
示例:
bash
# 10 秒后终止命令
timeout 10s command
# 5 分钟后终止命令
timeout 5m command
# 发送 SIGINT 信号终止命令
timeout -s INT 30s command
# 30 秒后发送 SIGTERM,如果 10 秒内没有终止则发送 SIGKILL
timeout -k 10s 30s command3. 作业控制命令
3.1 jobs - 显示当前作业
jobs 命令用于显示当前 shell 环境中的作业列表。
语法:
bash
jobs [选项] [作业 ID...]常用选项:
-l:显示作业的 PID-n:只显示状态改变的作业-p:只显示作业的 PID-r:只显示运行中的作业-s:只显示已停止的作业
示例:
bash
# 显示所有作业
jobs
# 显示作业及其 PID
jobs -l
# 只显示运行中的作业
jobs -r
# 只显示已停止的作业
jobs -s3.2 bg - 将作业置于后台
bg 命令用于将前台停止的作业置于后台继续运行。
语法:
bash
bg [作业 ID...]示例:
bash
# 将最近停止的作业置于后台
bg
# 将特定作业置于后台
bg %13.3 fg - 将作业置于前台
fg 命令用于将后台运行的作业移到前台。
语法:
bash
fg [作业 ID...]示例:
bash
# 将最近的后台作业移到前台
fg
# 将特定作业移到前台
fg %23.4 disown - 移除作业
disown 命令用于从当前 shell 的作业列表中移除作业,使其在 shell 退出后仍能继续运行。
语法:
bash
disown [选项] [作业 ID...]常用选项:
-a:移除所有后台作业-h:标记作业,使其不接收 SIGHUP 信号-r:只移除运行中的作业
示例:
bash
# 移除最近的作业
disown
# 移除特定作业
disown %1
# 移除所有作业
disown -a
# 标记作业使其在 shell 退出后仍能运行
disown -h %14. 系统资源监控命令
4.1 free - 内存使用情况
free 命令用于显示系统内存和交换空间的使用情况。
语法:
bash
free [选项]常用选项:
-b:以字节为单位显示-k:以 KB 为单位显示(默认)-m:以 MB 为单位显示-g:以 GB 为单位显示-t:显示总计行-h:以人类可读的格式显示-s N:每 N 秒更新一次显示
示例:
bash
# 显示内存使用情况
free
# 以人类可读的格式显示
free -h
# 显示总计行
free -t
# 每 2 秒更新一次
free -s 24.2 vmstat - 虚拟内存统计
vmstat 命令用于报告虚拟内存、进程、CPU 活动等系统信息。
语法:
bash
vmstat [选项] [延迟 [计数]]常用选项:
-a:显示活跃和非活跃内存-f:显示从系统启动以来创建的进程总数-m:显示 slab 信息-n:只在开始时显示一次列标题-s:显示内存和交换空间的统计信息-d:显示磁盘统计信息-p:显示指定磁盘分区的统计信息
示例:
bash
# 显示系统状态,每秒更新一次,共更新 5 次
vmstat 1 5
# 显示磁盘统计信息
vmstat -d
# 显示指定分区的统计信息
vmstat -p /dev/sda1
# 显示内存统计摘要
vmstat -s4.3 iostat - CPU 和 I/O 统计
iostat 命令用于监控 CPU 使用率和所有磁盘的 I/O 统计信息。
语法:
bash
iostat [选项] [设备] [延迟 [计数]]常用选项:
-c:仅显示 CPU 统计信息-d:仅显示磁盘统计信息-h:以人类可读的格式显示-k:以 KB 为单位显示-m:以 MB 为单位显示-x:显示扩展的统计信息
示例:
bash
# 显示 CPU 和磁盘统计信息
iostat
# 每秒更新一次,共更新 3 次
iostat 1 3
# 仅显示磁盘统计信息
iostat -d
# 显示扩展的磁盘统计信息
iostat -x
# 以人类可读的格式显示
iostat -h4.4 mpstat - 多处理器统计
mpstat 命令用于报告各 CPU 核心的使用情况统计。
语法:
bash
mpstat [选项] [延迟 [计数]]常用选项:
-P {处理器 ID | ALL}:指定要监控的处理器或全部处理器-A:显示所有可用的处理器统计信息
示例:
bash
# 显示所有处理器的统计信息
mpstat -P ALL
# 每秒更新一次,共更新 5 次
mpstat 1 5
# 只显示特定 CPU 核心的信息
mpstat -P 14.5 netstat - 网络统计
netstat 命令用于显示网络连接、路由表、接口统计等信息。
语法:
bash
netstat [选项]常用选项:
-a:显示所有套接字-t:显示 TCP 连接-u:显示 UDP 连接-l:只显示监听状态的套接字-n:以数字形式显示地址和端口号-p:显示进程 ID 和程序名称-r:显示路由表-s:显示网络协议统计信息-i:显示网络接口统计信息
示例:
bash
# 显示所有网络连接
netstat -a
# 显示 TCP 监听端口
netstat -tlnp
# 显示 UDP 连接
netstat -un
# 显示路由表
netstat -r
# 显示网络接口统计
netstat -i
# 查找特定端口的使用情况
netstat -tlnp | grep 804.6 ss - Socket 统计
ss 命令是 netstat 的现代替代品,用于显示套接字统计信息,效率更高。
语法:
bash
ss [选项]常用选项:
-a:显示所有套接字-t:显示 TCP 套接字-u:显示 UDP 套接字-l:显示监听状态的套接字-n:以数字形式显示地址-p:显示进程信息-r:解析主机名-s:显示套接字使用统计
示例:
bash
# 显示所有 TCP 连接
ss -tuln
# 显示已建立的连接
ss -s
# 查找特定端口
ss -tuln 'sport = :80'
# 显示进程和连接
ss -tupn5. 高级进程管理技术
5.1 信号处理
理解 Linux 信号系统对于高级进程管理至关重要。可以使用 trap 命令在 shell 脚本中捕获和处理信号。
常用信号:
SIGINT (2):中断信号(Ctrl+C)SIGTERM (15):终止信号SIGKILL (9):强制终止信号SIGHUP (1):挂起信号SIGUSR1 (10)/SIGUSR2 (12):用户定义信号
示例:在脚本中使用 trap
bash
#!/bin/bash
# 信号处理函数
cleanup() {
echo "捕获到终止信号,正在清理..."
# 执行清理操作
exit 0
}
# 捕获信号
trap cleanup SIGINT SIGTERM
echo "脚本正在运行,按 Ctrl+C 终止..."
# 保持脚本运行
while true; do
sleep 1
done5.2 进程优先级管理
对于需要优化系统性能的情况,可以使用 chrt 命令设置实时进程的调度策略和优先级。
语法:
bash
chrt [选项] 优先级 [PID | 命令 [参数...]]常用选项:
-b, --batch:设置为批处理调度策略-d, --deadline:设置为截止时间调度策略-f, --fifo:设置为 FIFO 实时调度策略-i, --idle:设置为空闲调度策略-o, --other:设置为标准调度策略-r, --rr:设置为轮询实时调度策略
示例:
bash
# 查看进程的调度策略和优先级
chrt -p 1234
# 设置进程为实时 FIFO 调度策略,优先级 50
chrt -f -p 50 1234
# 以特定调度策略启动新进程
chrt -r 10 ./realtime_app5.3 进程资源限制
使用 ulimit 命令可以限制 shell 及其子进程的资源使用。
常用选项:
-a:显示所有限制-c:设置 core 文件大小限制-d:设置数据段大小限制-f:设置文件大小限制-m:设置最大内存大小-n:设置打开文件数限制-p:设置管道大小-s:设置栈大小限制-t:设置 CPU 时间限制-u:设置最大用户进程数
示例:
bash
# 显示所有资源限制
ulimit -a
# 设置最大打开文件数为 1000
ulimit -n 1000
# 设置最大用户进程数为 50
ulimit -u 50
# 设置 CPU 时间限制为 30 秒
ulimit -t 305.4 进程跟踪与调试
strace 和 ltrace 命令用于跟踪进程的系统调用和库调用,是调试进程问题的强大工具。
strace 示例:
bash
# 跟踪命令的系统调用
strace ls -la
# 将输出保存到文件
strace -o output.log command
# 附加到正在运行的进程
strace -p 1234
# 只跟踪特定的系统调用
strace -e open,read commandltrace 示例:
bash
# 跟踪命令的库调用
ltrace ls -la
# 将输出保存到文件
ltrace -o output.log command
# 附加到正在运行的进程
ltrace -p 12346. 总结
Linux 提供了丰富的进程管理命令,用于监控、控制和管理系统中的进程。本文详细介绍了各种进程管理命令的语法、选项和使用示例,包括:
- 进程查看命令:ps、top、htop、pstree、pgrep/pkill
- 进程控制命令:kill、killall、nice/renice、nohup、timeout
- 作业控制命令:jobs、bg、fg、disown
- 系统资源监控命令:free、vmstat、iostat、mpstat、netstat、ss
- 高级进程管理技术:信号处理、进程优先级管理、资源限制、进程跟踪
掌握这些命令对于系统管理员和开发人员来说是必不可少的,它们提供了强大的工具来监控系统性能、排查问题和优化进程运行。在实际使用中,应根据具体需求选择合适的命令和选项,并遵循最佳实践,以确保系统的稳定运行和高效性能。