Skip to main content

Linux进程管理

在 Linux 系统中,进程管理是系统运维和日常操作的重要部分。以下是常用的进程管理命令及其用途:


1. 查看进程

  • ps
    查看当前进程的快照。

    ps aux       # 查看所有运行中的进程(BSD 格式)
    ps -ef       # 查看所有进程(标准格式)
    ps -u user   # 查看特定用户的进程
    ps -p {pid} -f
    
  • top / htop
    实时动态查看进程和系统资源占用(htop 是增强版,需安装)。

    top          # 交互式界面,按 `q` 退出
    htop         # 更友好的界面(支持鼠标操作)
    
  • pstree
    以树状结构显示进程关系。

    pstree -p    # 显示进程及其 PID
    

2. 终止进程

  • kill
    通过进程 ID (PID) 终止进程。

    kill -9 PID          # 强制终止进程(SIGKILL)
    kill -15 PID         # 优雅终止进程(SIGTERM,默认)
    
  • pkill
    通过进程名终止进程。

    pkill -9 nginx       # 强制终止所有名为 "nginx" 的进程
    
  • killall
    终止所有匹配名称的进程。

    killall -9 python    # 强制终止所有名为 "python" 的进程
    

3. 进程优先级

  • nice
    启动进程时指定优先级(范围:-20 最高优先级,19 最低)。

    nice -n 10 command   # 以较低优先级运行命令
    
  • renice
    修改已运行进程的优先级。

    renice -n 5 -p PID   # 修改指定 PID 的优先级为 5
    

4. 后台进程管理

  • &
    将进程放到后台运行。

    command &    # 后台运行命令
    
  • jobs
    查看当前终端后台任务。

    jobs -l      # 显示后台任务及其 PID
    
  • fg / bg
    将任务切换到前台(fg)或继续后台运行(bg)。

    fg %1        # 将任务 1 切换到前台
    bg %2        # 将任务 2 继续在后台运行
    
  • nohup
    退出终端后仍保持进程运行。

    nohup command &      # 忽略 SIGHUP 信号,日志默认写入 nohup.out
    

5. 进程搜索

  • pgrep
    根据名称查找进程 PID。
    pgrep -u root nginx  # 查找 root 用户的 nginx 进程 PID
    

6. 监控工具

  • vmstat
    查看系统资源使用情况(CPU、内存、IO 等)。

    vmstat 1      # 每秒刷新一次
    
  • pidstat(需安装 sysstat
    监控进程的 CPU、内存等资源占用。

    pidstat -p PID 1   # 每秒监控指定 PID
    

7. 其他实用命令

  • lsof
    列出被进程打开的文件。

    lsof -i :80       # 查看占用 80 端口的进程
    lsof -p PID       # 查看指定 PID 打开的文件
    
  • strace
    跟踪进程的系统调用。

    strace -p PID     # 跟踪进程的系统调用(调试用)
    

常见场景示例

  1. 终止失控的进程

    ps aux | grep "bad_process"  # 查找 PID
    kill -9 PID
    
  2. 后台运行并保存日志

    nohup python script.py > output.log 2>&1 &
    
  3. 监控高 CPU 进程

    top -o %CPU          # 按 CPU 使用率排序
    

掌握这些命令后,你可以高效地管理 Linux 系统中的进程。如果需要更详细的信息,可以通过 man 命令名(如 man ps)查看手册。

在 Linux 中,查看和管理进程的详细信息是系统管理的重要任务。以下是 查看进程详情 的常用命令和技巧,涵盖进程的资源占用、打开文件、环境变量、运行状态等关键信息。


1. 查看进程基本信息

(1) ps(进程快照)

查看进程的 PID、CPU、内存、启动命令 等基础信息:

ps aux | grep <进程名>     # 模糊匹配进程(常用)
ps -ef | grep <进程名>     # 标准格式查看
ps -p <PID> -o pid,ppid,cmd,%cpu,%mem,stat  # 查看指定进程的详细信息
  • 关键字段说明
    • %CPU:CPU 占用率
    • %MEM:内存占用率
    • STAT:进程状态(如 S=睡眠,R=运行,Z=僵尸进程)
    • PPID:父进程 ID

(2) top / htop(实时监控)

动态查看进程的 资源占用排名(CPU、内存等):

top                          # 默认按 CPU 排序
top -p <PID>                 # 监控指定 PID
htop                         # 交互式增强版(支持鼠标操作)
  • 交互操作
    • P:按 CPU 排序
    • M:按内存排序
    • F1:查看帮助

2. 查看进程的详细属性

(1) /proc/<PID> 目录

Linux 将所有进程的详细信息映射到 /proc/<PID>/ 目录下,可直接查看:

ls /proc/<PID>               # 查看进程的详细信息文件
cat /proc/<PID>/status       # 进程状态(名称、PID、内存等)
cat /proc/<PID>/cmdline      # 查看进程的完整启动命令
cat /proc/<PID>/environ      # 查看进程的环境变量
  • 关键文件
    • status:进程状态摘要
    • statm:内存使用情况
    • io:I/O 统计信息

(2) pmap(内存映射)

查看进程的 内存占用分布

pmap -x <PID>                # 显示详细内存映射

3. 查看进程打开的文件和网络连接

(1) lsof(列出打开文件)

查看进程打开的文件、目录、网络连接等:

lsof -p <PID>                # 查看指定进程打开的文件
lsof -i :80                  # 查看占用 80 端口的进程
lsof -u <用户名>             # 查看用户打开的文件
  • 常用选项
    • -i:网络连接
    • -c <进程名>:按进程名过滤

(2) netstat / ss(网络连接)

查看进程的 网络连接状态

netstat -tulnp | grep <PID>  # 查看进程的网络连接(旧版)
ss -tulnp | grep <PID>       # 更快的替代方案(推荐)

4. 查看进程的线程和调用栈

(1) pstree(进程树)

显示进程的 父子关系 和线程:

pstree -p <PID>              # 树状显示进程及线程

(2) strace(系统调用跟踪)

监控进程的 系统调用(调试用):

strace -p <PID>              # 实时跟踪进程的系统调用
strace -e open,read <命令>   # 跟踪命令的特定系统调用

(3) gdb(调试器附加)

深入分析进程的运行状态(需谨慎使用):

gdb -p <PID>                 # 附加到运行中的进程

5. 查看进程的资源限制

(1) ulimit

查看当前 shell 的资源限制:

ulimit -a                    # 显示所有限制(如打开文件数、栈大小等)

(2) /proc/<PID>/limits

查看指定进程的资源限制:

cat /proc/<PID>/limits       # 显示进程的软/硬限制

6. 统计进程的资源使用

(1) pidstat(综合监控)

监控进程的 CPU、内存、IO 等(需安装 sysstat):

pidstat -p <PID> 1           # 每秒刷新一次统计信息
pidstat -d -p <PID>          # 监控磁盘 I/O

(2) ps -eo(自定义输出)

按需显示进程的特定字段:

ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%mem | head  # 按内存排序

常见问题排查示例

  1. 进程卡死

    top                        # 找到高 CPU/内存的 PID
    strace -p <PID>            # 检查系统调用是否阻塞
    kill -9 <PID>              # 强制终止
    
  2. 内存泄漏

    pmap -x <PID>              # 查看内存分布
    cat /proc/<PID>/status | grep VmRSS  # 检查实际内存占用
    
  3. 端口冲突

    lsof -i :8080              # 查看占用端口的进程
    

总结

需求 命令
查看进程基本信息 ps aux / top
查看进程环境变量 cat /proc/<PID>/environ
查看打开的文件 lsof -p <PID>
监控资源占用 pidstat / htop
分析系统调用 strace -p <PID>
查看网络连接 ss -tulnp / netstat

通过组合这些命令,你可以全面掌握 Linux 进程的详细状态!