
1. Linux进程管理概述在Linux系统中进程管理是系统管理员和开发人员必须掌握的核心技能之一。每个运行中的程序都会创建一个或多个进程这些进程需要被有效地监控和管理以确保系统资源的合理分配和系统稳定运行。关键点Linux采用分时多任务的设计理念通过进程调度器在多个进程间快速切换实现同时运行多个程序的效果。1.1 进程基本概念进程(Process)是程序在操作系统中的一次执行实例具有以下特征拥有独立的地址空间包含程序代码和当前活动状态拥有唯一的进程ID(PID)可以创建子进程在Linux中第一个进程是init/systemd(PID1)所有其他进程都是它的子进程或后代进程。2. 进程查看工具详解2.1 ps命令实战ps(process status)是最常用的进程查看工具其常用组合# 查看当前终端相关进程 ps -l # 查看系统所有进程的完整信息 ps aux # 以树状显示进程关系 ps axjf输出字段解析USER进程所有者PID进程ID%CPUCPU占用百分比%MEM内存占用百分比VSZ虚拟内存使用量(KB)RSS常驻内存使用量(KB)TTY关联的终端STAT进程状态R运行中S可中断睡眠D不可中断睡眠T停止状态Z僵尸进程START启动时间TIME累计CPU时间COMMAND执行的命令2.2 top动态监控top提供实时系统监控常用操作top -d 2 # 每2秒刷新在top界面中按P按CPU使用率排序按M按内存使用排序按k终止指定PID进程按r调整进程优先级按q退出2.3 pstree进程树显示进程间的父子关系pstree -p # 显示PID pstree -u # 显示用户典型输出示例systemd(1)─┬─sshd(1234)───sshd(5678)───bash(9012) ├─crond(2345) └─docker(3456)─┬─docker-containe(4567) └─3*[docker-containe]3. 进程控制与管理3.1 信号机制Linux通过信号控制进程常用信号信号值名称作用1SIGHUP重新加载配置2SIGINT中断进程(CtrlC)9SIGKILL强制终止15SIGTERM优雅终止(默认)19SIGSTOP暂停进程(CtrlZ)3.2 kill命令应用终止进程的两种方式# 通过PID终止 kill -9 1234 # 通过进程名终止 killall -9 nginx特殊技巧# 优雅重启nginx kill -HUP $(pgrep nginx) # 终止所有python进程 pkill python3.3 进程优先级调整Linux进程优先级由PRI(不可调)和NI(可调)共同决定nice值范围-20(最高)到19(最低)普通用户只能调高nice值(降低优先级)调整方法# 启动时设置优先级 nice -n 10 ./script.sh # 调整运行中进程 renice -n 5 -p 12344. 系统资源监控4.1 内存监控free -h # 人性化显示输出说明total used free shared buff/cache available Mem: 7.7G 2.1G 3.2G 345M 2.4G 5.0G Swap: 2.0G 512K 2.0G重点关注available值表示实际可用内存。4.2 综合监控工具vmstat 1 5 # 每秒1次共5次输出字段解析procs.r运行队列长度memory.swpd使用的swap空间io.bi/bo块设备读写system.in中断次数cpu.idCPU空闲率4.3 网络连接查看netstat -tulnp # 查看监听端口 ss -s # 统计连接信息5. 进程管理实战技巧5.1 僵尸进程处理僵尸进程产生原因父进程未正确回收子进程父进程异常终止解决方法# 1. 尝试正常终止父进程 kill -15 parent_pid # 2. 强制终止父进程 kill -9 parent_pid # 3. 终极方案重启系统5.2 后台进程管理# 将进程放入后台 ./server.sh # 查看后台作业 jobs # 将后台作业调回前台 fg %1 # 暂停当前前台作业 CtrlZ # 继续后台作业 bg %15.3 进程资源限制使用ulimit限制用户资源# 查看当前限制 ulimit -a # 设置最大进程数 ulimit -u 1024 # 设置核心转储大小 ulimit -c unlimited6. 高级进程管理工具6.1 htop增强版top安装yum install htop # CentOS apt install htop # Ubuntu特点彩色界面鼠标操作支持树状视图进程过滤6.2 glances全能监控安装pip install glances功能CPU/内存/磁盘/网络监控进程管理警报系统Web界面6.3 进程间通信监控# 查看IPC设施 ipcs # 查看进程打开的文件 lsof -p pid # 查看进程系统调用 strace -p pid7. 生产环境问题排查7.1 高CPU占用排查步骤top找出问题PID查看进程详细信息ps -fp pid查看线程占用top -H -p pid分析调用栈pstack pid7.2 内存泄漏排查工具组合# 监控内存变化 watch -n 1 ps -eo pid,comm,%mem --sort-%mem | head # 检测内存泄漏 valgrind --leak-checkfull ./program7.3 磁盘IO问题排查# 查看IO等待 iostat -x 1 # 查看进程IO iotop # 查看磁盘使用 df -h8. 自动化进程管理8.1 systemd服务管理# 查看服务状态 systemctl status nginx # 启停服务 systemctl start|stop|restart nginx # 设置开机启动 systemctl enable nginx8.2 监控脚本示例进程监控脚本#!/bin/bash SERVICEnginx if ! pgrep -x $SERVICE /dev/null then echo $SERVICE stopped, restarting... systemctl start $SERVICE fi8.3 进程守护工具使用supervisor[program:myapp] command/usr/bin/python /opt/myapp.py autostarttrue autorestarttrue stderr_logfile/var/log/myapp.err.log stdout_logfile/var/log/myapp.out.log9. 性能优化建议减少进程创建开销使用线程池/连接池合理设置进程优先级关键进程设高优先级避免僵尸进程正确处理SIGCHLD信号限制资源使用防止单个进程耗尽系统资源使用异步I/O减少进程阻塞时间10. 安全注意事项最小权限原则进程以最低必要权限运行定期更新修复进程相关漏洞监控异常进程检测入侵行为限制敏感系统调用通过seccomp隔离关键进程使用cgroups/namespace在实际运维中我曾遇到一个典型案例某Java应用频繁崩溃通过分析发现是OOM问题。使用jmap -heap pid发现老年代持续增长最终通过调整JVM参数解决了问题。这个经历让我深刻体会到进程监控工具在实际故障排查中的价值。