Linux操作系统:Linux的进程管理

进程管理是Linux系统管理的核心内容之一,它涉及进程的创建、监控、控制和调度。下面我将从多个维度全面介绍Linux进程管理的各个方面。

一、进程基础概念

【1】什么是进程

   进程是程序在操作系统中的一次执行实例

   每个进程都有独立的地址空间、资源和执行状态

   Linux中第一个进程是init/systemd(PID=1)

【2】进程与线程的区别

   进程:资源分配的基本单位,有独立内存空间

   线程:CPU调度的基本单位,共享进程资源

   Linux通过轻量级进程(LWP)实现线程

【3】进程状态

   R (Running):正在运行或可运行

   S (Sleeping):可中断的睡眠状态

   D (Uninterruptible Sleep):不可中断的睡眠状态

   T (Stopped):暂停状态

   Z (Zombie):僵尸进程

   X (Dead):死亡状态(不可见)

二、进程查看命令

【1】 ps命令

# 查看当前终端进程

ps

# 查看所有进程(BSD风格)

ps  aux

# 查看所有进程(标准Unix风格)

ps   ef

# 查看进程树

ps   ejH

ps axjf

# 查看特定用户的进程

ps   u username

# 查看特定进程的详细信息

ps   p PID   o pid,ppid,user,cmd,%cpu,%mem,stat

【2】top命令

# 动态查看进程信息

top

# 批处理模式运行(可用于脚本)

top   b   n 1

# 按内存排序

top   o %MEM

# 按CPU排序

top   o %CPU

# 只显示特定用户的进程

top   u username

【3】 htop命令(增强版top)

htop

【4】pstree命令

# 以树状显示进程

pstree

# 显示进程ID

pstree   p

# 显示特定用户的进程树

pstree username

三、进程控制命令

【1】 启动进程

# 前台运行

command

# 后台运行

command &

# 不挂断地运行命令(退出终端仍运行)

nohup command &

【2】终止进程

# 正常终止(发送TERM信号)

kill PID

# 强制终止(发送KILL信号)

kill   9 PID

# 按名称终止进程

pkill process_name

# 终止所有匹配的进程

killall process_name

【3】 暂停与恢复

# 暂停进程(发送STOP信号)

kill   19 PID

# 恢复进程(发送CONT信号)

kill   18 PID

# 前台运行时按Ctrl+Z暂停

# 使用fg恢复前台运行或bg后台运行

四、进程优先级与调度

【1】查看优先级

# NI值范围  20(最高)到19(最低)

ps   eo pid,ni,comm

【2】调整优先级

# 启动时设置优先级

nice   n 10 command

# 修改运行中进程的优先级

renice 10   p PID

【3】 CPU亲和性

# 查看进程的CPU亲和性

taskset   p PID

# 设置进程的CPU亲和性

taskset   cp 0,1 PID  # 绑定到CPU0和1

五、进程间通信(IPC)

【1】常见IPC机制

   管道(pipe)

   命名管道(FIFO)

   信号(signal)

   消息队列

   共享内存

   信号量

   套接字(socket)

【2】查看IPC资源

# 查看系统IPC状态

ipcs

# 查看共享内存

ipcs   m

# 查看消息队列

ipcs   q

# 查看信号量

ipcs   s

# 删除IPC资源

ipcrm

六、系统资源限制

【1】 ulimit命令

# 查看当前限制

ulimit   a

# 设置最大打开文件数

ulimit   n 65536

# 设置最大进程数

ulimit   u unlimited

【2】 /proc文件系统

# 查看进程详细信息

cat /proc/PID/status

# 查看进程打开的文件

ls   l /proc/PID/fd

# 查看进程内存映射

cat /proc/PID/maps

七、高级进程管理

【1】进程监控工具

# 监控进程活动

vmstat 1

# 监控I/O活动

iostat 1

# 监控系统调用

strace   p PID

# 监控库调用

ltrace   p PID

【2】定时任务

# 一次性定时任务

at now + 1 hour

at> command

at> Ctrl+D

# 周期性定时任务(crontab)

crontab   e

【3】systemd服务管理

# 启动服务

systemctl start service_name

# 停止服务

systemctl stop service_name

# 查看服务状态

systemctl status service_name

# 设置开机启动

systemctl enable service_name

八、进程管理实践技巧

【1】查找高CPU占用进程

ps   eo pid,ppid,cmd,%cpu,%mem     sort=  %cpu | head

【2】查找内存泄漏进程

ps   eo pid,ppid,cmd,%mem     sort=  %mem | head

【3】批量终止进程

pkill   f “pattern”  # 终止匹配模式的进程

kill $(ps   ef | grep “pattern” | awk '{print $2}')  # 更精确的控制

【4】监控进程变化

watch   n 1 'ps   eo pid,ppid,cmd,%cpu,%mem     sort=  %cpu | head'

【5】分析进程启动时间

ps   eo pid,cmd,lstart | grep process_name

Linux进程管理是一个庞大而复杂的主题,掌握这些命令和技巧可以帮助你更好地理解和控制系统中的进程行为。实际工作中,应根据具体需求选择合适的工具和方法。

Linux进程管理ps命令的应用案例:

ps (Process Status) 命令是 Linux 中最常用的进程查看工具,它可以显示当前系统的进程状态信息。由于历史原因,ps 支持三种不同的参数风格:Unix 风格(以- 开头)、BSD 风格(无-)和 GNU 风格(以– 开头)。

完整语法格式:

ps [options]

主要参数及含义:

【1】进程选择选项

【2】输出格式控制选项

【3】输出修饰选项

【4】信息显示选项

【5】线程显示选项

常用组合参数:

【1】 BSD风格组合:

  aux = 显示所有用户的完整格式进程信息

            a = 显示所有用户的进程

            u = 用户导向格式

            x = 包括无终端的进程

【2】Unix风格组合:

 -ef = 显示所有进程的完整列表

           -e = 所有进程

           -f = 完整格式

输出格式说明符(用于-o参数):

PS命令示例:

# 1. 显示当前终端关联的所有进程(基础用法)

ps

# 2. 显示所有用户的完整进程信息(BSD风格)

ps aux

# 3. 显示所有进程的完整列表(Unix风格)

ps -ef

# 4. 以树状结构显示进程层次关系

ps -ejH

# 5. 用ASCII艺术显示进程树

ps axjf

# 6. 查看特定用户(如root)的所有进程

ps -u root

# 7. 按CPU使用率降序排序显示前10个进程

ps -eo pid,ppid,cmd,%cpu –sort=-%cpu | head -10

# 8. 按内存使用率降序排序显示前10个进程

ps -eo pid,ppid,cmd,%mem –sort=-%mem | head -10

# 9. 显示特定进程ID(如1234)的详细信息

ps -p 1234 -o pid,ppid,user,cmd,%cpu,%mem,stat

# 10. 显示所有线程信息(LWP轻量级进程)

ps -eLf

# 11. 显示特定进程的线程信息

ps -T -p 1234

# 12. 显示进程的环境变量

ps e -p 1234

# 13. 显示SELinux安全上下文

ps -eZ

# 14. 显示进程的父/子关系(树状)

ps –forest

# 15. 自定义输出格式(显示PID、PPID、命令、运行时间)

ps -eo pid,ppid,cmd,etime

# 16. 显示进程的累计CPU时间

ps -eo pid,cmd,time

# 17. 显示进程的启动时间和运行时长

ps -eo pid,cmd,start_time,etime

# 18. 显示进程的优先级(nice值)

ps -eo pid,cmd,nice

# 19. 显示进程的终端和控制台信息

ps -eo pid,cmd,tty

# 20. 显示进程的虚拟内存和常驻内存使用情况

ps -eo pid,cmd,vsz,rss

# 21. 显示进程的信号处理掩码

ps -eo pid,cmd,blocked

# 22. 显示进程的调度策略

ps -eo pid,cmd,policy

# 23. 显示进程的等待通道(为什么在睡眠)

ps -eo pid,cmd,wchan

# 24. 显示进程的会话ID和进程组ID

ps -eo pid,cmd,sid,pgid

# 25. 显示进程的实时优先级

ps -eo pid,cmd,rtprio

# 26. 显示进程的终端大小(行和列)

ps -eo pid,cmd,lines,cols

# 27. 显示进程的处理器亲和性

ps -eo pid,cmd,psr

# 28. 显示进程的挂起信号

ps -eo pid,cmd,pending

# 29. 显示进程的已忽略信号

ps -eo pid,cmd,ignored

# 30. 组合多个字段的自定义输出格式

ps -eo pid,ppid,user,ni,%cpu,%mem,vsz,rss,tty,stat,start,time,cmd

输出字段说明:

    PID:进程ID

    PPID:父进程ID

    %CPU:CPU使用率

    %MEM:内存使用率

    VSZ:虚拟内存大小(KB)

    RSS:常驻内存大小(KB)

    TTY:控制终端

    STAT:进程状态

    START:启动时间

    TIME:累计CPU时间

    CMD:命令名称/命令行

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容