Linux 系统进程管理与计划任务详解

发布于:2025-07-31 ⋅ 阅读:(19) ⋅ 点赞:(0)

Linux 系统进程管理与计划任务详解

一、程序与进程的基本概念

  • 程序:保存在外部存储介质中的可执行机器代码和数据的静态集合。
  • 进程:在CPU及内存中处于动态执行状态的计算机程序。
  • 关系:每个程序启动后,可创建一个或多个进程。

二、进程查看工具

1. ps(查看静态进程信息)
  • 常用选项:

    • -a:显示当前终端下所有进程(含其他用户);与-x结合显示系统所有进程。
    • -u:以用户为主的格式输出进程信息。
    • -x:显示当前用户所在终端的进程信息。
    • -e:显示系统内所有进程。
    • -l:长格式显示。
    • -f:完整格式显示。

    常用aux和elf的组合

    在这里插入图片描述

    在这里插入图片描述

  • 输出字段含义:

    • USER:启动进程的用户账号。
    • PID:进程唯一ID号。
    • %CPU:CPU占用百分比。
    • %MEM:内存占用百分比。
    • VSZ:虚拟内存(swap)占用大小。
    • RSS:物理内存占用大小。
    • TTY:运行终端(“?”表示未知/无需终端)。
    • STAT:进程状态(S休眠、R运行、Z僵死、<高优先级、N低优先级、s父进程、+前台进程、L锁内存)。
    • START:启动时间。
    • TIME:占用CPU的时间。
    • COMMAND:启动进程的命令名称。
2. top(查看动态进程信息)

在这里插入图片描述

  • 核心指标:

    • load average:CPU平均负载(1分钟、5分钟、15分钟);若5/15分钟负载超过CPU个数2倍,系统高负载。

    • task

      • total:系统当前所有进程的总数(包括所有状态)。
      • running:正在占用 CPU 运行的进程数(处于 R 状态)。
      • sleeping:休眠的进程数(等待事件 / 资源,如 I/O 完成,处于 SD 状态)。
      • stopped:被暂停的进程(如通过 ctrl+z 挂起,处于 T 状态)。
      • zombie:僵死进程(进程已终止,但父进程未回收其资源,需手动清理)。
    • %cpu

      • us(user):用户空间进程占用 CPU 的比例(如应用程序)。若长期过高,可能是用户程序消耗资源过多。
      • sy(system):内核空间进程占用 CPU 的比例(如系统调用、进程调度)。若过高,可能是内核频繁处理任务(如大量 I/O 调度)。
      • ni(nice):调整过优先级的用户进程(通过 nice 命令设置)占用 CPU 的比例。
      • id(idle):CPU 空闲的比例。若长期过低(如 < 10%),说明 CPU 负载高。
      • wa(iowait):CPU 等待 I/O 操作(如磁盘读写、网络传输)的时间比例。若长期 > 20%,可能是 I/O 瓶颈(如磁盘慢、网络拥堵)。
      • hi(hardware irq):硬件中断(如键盘、磁盘控制器)占用 CPU 的比例。
      • si(software irq):软件中断(如系统定时器)占用 CPU 的比例。
      • st(steal):被虚拟化环境中其他虚拟机占用的 CPU 比例(仅在虚拟机中有效)。
    • mem

      • total:物理内存总容量(单位通常为 KB)。
      • used:已被进程实际使用的内存(不包括缓冲 / 缓存)。
      • free:完全空闲的内存(未被任何进程或缓冲 / 缓存使用)。
      • buff/cache:
        • buff:用于缓冲写入的数据(即将写入磁盘的临时数据,避免频繁磁盘 I/O)。
        • cache:用于缓存读取的数据(从磁盘读取过的数据,下次可直接从内存读取,加速访问)。
        • 这部分内存可被系统自动释放给需要的进程,因此实际 “可用内存”≈ free + buff/cache。
    • swap

      • total:交换空间(虚拟内存)总容量(通常为磁盘上的 swap 分区 / 文件)。
      • used:已使用的交换空间(当物理内存不足时,系统会将部分不常用内存数据写入 swap)。
      • free:空闲的交换空间。
      • avail Mem:估算的 “可用物理内存”(包括 free 内存 + 可释放的 buff/cache,供新进程使用的内存量)。
  • 进程信息字段:

    列名 含义说明
    PID 进程唯一 ID(系统中唯一,可用于 kill 等命令操作进程)。
    USER 进程所属用户(进程的创建者或运行用户)。
    PR 进程优先级(数值越小,优先级越高): - 0~39 之间(内核动态调整); - 实时优先级(-1~-20,比普通进程高)。
    NI 进程的 nice 值(用户可调整的优先级偏移量): - 范围 -20~19(默认 0); - 数值越小,优先级越高(PR = NI + 20,便于显示)。
    VIRT 进程占用的虚拟内存总量(包括物理内存、swap、未使用的分配内存等,单位 KB)。
    RES 进程实际使用的物理内存(不包括 swap,单位 KB,RES = 实际占用的物理内存)。
    SHR 进程与其他进程共享的内存量(单位 KB,包括共享库、共享数据等)。
    S 进程状态(单字母标识): - R:运行中(正在使用 CPU 或等待调度); - S:休眠(等待事件,可被唤醒); - D:不可中断休眠(如等待磁盘 I/O,不能被信号终止); - T:停止(被 ctrl+zkill -19 暂停); - Z:僵死(进程已终止,资源未回收)。
    %CPU 进程自上次刷新以来占用 CPU 的百分比(单个核心为 100%,多核心总和可超过 100%)。
    %MEM 进程使用的物理内存占系统总内存的百分比。
    TIME+ 进程自启动以来累计占用的 CPU 时间(精确到 0.01 秒)。
    COMMAND 启动进程的命令(按 c 可显示完整命令路径)。
3. 其他进程查看命令
  • pgrep -l 进程名:查看某进程的进程号和名称(如pgrep -l systemd)。
  • pstree:查看进程树形结构:
    • -p:同时列出PID;-u:列出用户名;-a:列出完整命令。

三、进程控制

1. 手动启动进程
  • 前台启动:默认方式(命令直接执行)。
  • 后台启动:命令后加&(如route &,进程放入后台执行)。
2. 进程挂起与恢复
  • 挂起当前进程:前台执行的命令按ctrl+z,调入后台并停止执行。
  • 查看后台进程jobs -l
  • 恢复运行
    • bg:后台暂停的任务恢复后台执行。
    • fg:后台任务恢复到前台执行。
3. 终止进程
  • kill 进程号:终止指定进程;-9选项强制终止(如kill -9 1234)。
  • killall 进程名:终止多个同名进程;-9强制(如killall -9 httpd)。
  • pkill:按进程名、用户、终端等终止(-U指定用户,-t指定终端)。

四、计划任务

用于在指定时间/日期执行预设任务(如备份、数据采集)。

1. at(一次性任务)
  • 设置:at 时间 日期(如at 23:30 2020-11-23),输入命令后按ctrl+d结束。
  • 示例:at 23:30 2020-11-23at> ls / > /tmp/actrl+d
  • 管理:
    • atq:查询at任务。
    • at -c 任务号:查看任务详情。
    • atrm 任务号:删除任务。
2. crontab(周期性任务)
  • 配置文件:
    • 系统任务:/etc/crontab
    • 用户任务:/var/spool/cron/(按用户名存储)。
  • 时间格式:分 时 日 月 周(空格分隔)。
  • 常用选项:
    • -e:编辑计划任务。
    • -u 用户名:指定用户(如crontab -u natasha -e)。
    • -l:查询任务列表。
    • -r:删除任务列表。
  • 示例:
    1. 为用户natasha配置每天14:23执行/bin/echo "RHCSA",仅允许natasha和root创建任务:
      useradd natasha
      crontab -u natasha -e  
      输入:23 14 * * * /bin/echo "RHCSA"
      vim /etc/cron.allow  创建白名单只允许natasha和root创建任务
      写入:root、natasha
      systemctl restart crond && systemctl enable crond
      
    2. 每月1~5号14:00-17:00,每10分钟执行/bin/echo "I Love Galaxy"
      crontab -e  # 输入:*/10 14-17 1-5 * * /bin/echo "I Love Galaxy"
      systemctl restart crond && systemctl enable crond
      
    3. 周一至周五8:00-21:00,每2分钟将当前时间附加到/home/galaxy/my_first_cron_job.txt
      crontab -e  # 输入:*/2 8-21 * * 1-5 date >> /home/galaxy/my_first_cron_job.txt
      
      

网站公告

今日签到

点亮在社区的每一天
去签到