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

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

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

  • 程序:保存在外部存储介质中的可执行机器代码和数据的静态集合,是静态的文件实体
  • 进程:在 CPU 及内存中处于动态执行状态的计算机程序,是程序的动态执行实例
  • 关联关系:每个程序启动后可创建一个或多个进程,进程随程序启动而产生,随执行结束而消亡

二、进程查看工具

1. ps:查看静态进程信息

用于捕捉某一时刻的进程快照,常用选项及功能如下:

选项组合 功能描述
-a 显示当前终端下的所有进程(包括其他用户)
-u 以用户为主的格式输出进程信息
-x 显示当前用户所在终端的进程信息(与-a结合显示系统所有进程)
-e 显示系统内所有进程信息
-l 以长格式显示进程信息
-f 以完整格式显示进程信息

ps输出字段说明

字段 含义
USER 启动进程的用户账号名称
PID 进程在系统中的唯一数字 ID 号
%CPU CPU 占用百分比
%MEM 内存占用百分比
VSZ 占用虚拟内存(swap 空间)的大小
RSS 占用常驻内存(物理内存)的大小
TTY 进程运行的终端("?" 表示未知或无需终端)
STAT 进程状态(S 休眠、R 运行、Z 僵死、< 高优先级、N 低优先级等)
START 进程启动时间
TIME 进程占用 CPU 的时间
COMMAND 启动进程的命令名称

2. top:查看进程动态信息

实时监控进程资源占用,动态刷新进程状态(默认 3 秒 / 次),核心信息如下:

(1)系统负载信息
  • load average:CPU 平均负载,依次为 1 分钟、5 分钟、15 分钟内的平均值。若 5 分钟或 15 分钟负载值超过 CPU 核心数的 2 倍,系统处于高负载状态
(2)进程状态统计(task)
状态 含义
total 总进程数
running 正在运行的进程数
sleeping 休眠状态的进程数
stopped 停止状态的进程数
zombie 僵死状态的进程数
(3)CPU 占用信息(% cpu)
指标 含义
us 用户进程占用 CPU 时间的百分比
sy 系统进程占用 CPU 时间的百分比
ni 优先级调整后的用户进程占用 CPU 百分比
id 空闲 CPU 的百分比
wa I/O 等待占用 CPU 时间的百分比
hi 硬件中断占用 CPU 时间的百分比
si 软件中断占用 CPU 时间的百分比
st 虚拟化环境中被占用的 CPU 时间百分比
(4)进程详细字段(top输出)
字段 含义
PID 进程 ID
USER 进程属主名称
PR 进程优先级
NI 进程 nice 值(-20~+19,值越小优先级越高)
VIRT 占用虚拟内存总量(kb)
RES 占用物理内存总量(kb)
SHR 与其他进程共享的内存总量(kb)
S 进程状态(D 不可中断休眠、R 运行、S 休眠、T 停止、Z 僵死)
%CPU 进程使用 CPU 的百分比
%MEM 进程使用内存的百分比
TIME+ 进程启动后占用的 CPU 总时间
COMMAND 启动进程的命令名称

3. 其他进程查看工具

  • pgrep -l 进程名:查看某一进程的进程号和名称(例:pgrep -l systemd

复制代码
  pstree

:查看进程树形结构,常用选项:

  • -p:同时列出对应 PID
  • -u:列出对应用户名
  • -a:列出完整命令信息

三、进程控制方法

1. 手动启动进程

  • 前台启动 :直接执行命令(如ls),进程占用当前终端
  • 后台启动 :命令后加&(如route &),进程在后台执行,不阻塞终端

2. 进程挂起与恢复

操作 命令 / 快捷键 功能
挂起前台进程 Ctrl+Z 将当前运行的前台进程调入后台并停止执行
查看后台进程 jobs -l 显示后台进程列表(含进程号和状态)
恢复后台进程(后台运行) bg 任务号 使后台暂停的进程继续在后台执行
恢复后台进程(前台运行) fg 任务号 将后台进程调回前台执行

3. 终止进程

命令 格式 适用场景
kill kill 进程号 正常终止指定 PID 的进程
kill -9 kill -9 进程号 强制终止无法正常结束的进程(慎用)
killall killall 进程名 终止所有同名进程(如killall httpd
pkill pkill -U 用户名/pkill -t 终端 根据用户或终端终止特定进程

四、计划任务设置

1. at:一次性任务

  • 设置任务:

    bash 复制代码
    at 23:30 2020-11-23  # 指定执行时间
    at> ls / > /tmp/a     # 输入要执行的命令
    at> <Ctrl+D>          # 按Ctrl+D确认
  • 任务管理:

    • atq:查询待执行的 at 任务
    • at -c 任务号:查看任务具体内容
    • atrm 任务号:删除指定 at 任务

2. crontab:周期性任务

(1)核心配置
  • 系统配置文件/etc/crontab(系统级任务)
  • 用户任务存放目录/var/spool/cron/(用户级任务)
  • 时间格式 :分、时、日、月、周(支持通配符:*任意值、*/n每隔 n 单位、-范围、,列表)
(2)常用命令
命令 功能
crontab -e 编辑当前用户的周期性任务
crontab -u 用户名 -e 编辑指定用户的周期性任务
crontab -l 查看当前用户的任务列表
crontab -r 删除当前用户的所有任务
(3)权限控制
  • 通过/etc/cron.allow(允许创建任务的用户列表)和/etc/cron.deny(禁止创建任务的用户列表)限制权限
  • /etc/cron.allow中列出的用户可创建任务(默认优先于cron.deny

五、计划任务示例解析

示例 1:为用户 natasha 配置每日定时任务

需求 :每天 14:23 执行/bin/echo "RHCSA",仅允许 natasha 和 root 创建计划任务
步骤

  1. 创建用户:useradd natasha

  2. 配置任务:

    复制代码
    crontab -u natasha -e

    ,添加内容:

    bash 复制代码
    23 14 * * * /bin/echo "RHCSA"
  3. 限制权限:编辑

    复制代码
    /etc/cron.allow

    ,添加:

    bash 复制代码
    root
    natasha
  4. 重启服务:

    bash 复制代码
    systemctl restart crond
    systemctl enable crond

示例 2:每月周期性任务

需求 :每月 1~5 号 14:00-17:00,每隔 10 分钟执行/bin/echo "I Love Galaxy"
配置

bash 复制代码
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
配置

bash 复制代码
crontab -e  # 编辑任务
*/2 8-21 * * 1-5 date >> /home/galaxy/my_first_cron_job.txt  # 添加任务(注意用>>追加内容)
systemctl restart crond
systemctl enable crond

六、注意事项

  1. crontab任务中建议使用命令绝对路径(如/bin/date),避免环境变量问题
  2. 追加内容用>>,覆盖内容用>,根据需求选择
  3. 修改计划任务后需重启crond服务(systemctl restart crond)使其生效
  4. 僵死进程(Z 状态)需及时用kill -9手动终止,避免资源占用
相关推荐
小田冲冲冲3 分钟前
搭建域服务器
运维·服务器
亦安✘6 分钟前
服务器从0到1微服务所需的环境的安装
运维·服务器·spring cloud·微服务
taxunjishu1 小时前
ProfiNet 转 Ethernet/IP基于西门子 S7 - 1500 与罗克韦尔 PLC 的汽车零部件加工线协同案例
运维·人工智能·物联网·自动化·区块链
用户51681661458411 小时前
[VMware 无法检测此光盘中映像中的操作系统] VMware创建虚拟机无法检测操作系统iso镜像文件
linux·前端
MacroZheng1 小时前
斩获 7.8K star!一款堪称开源监控新标杆的项目,牛皮!
java·linux·后端
YC运维2 小时前
Ansible模块
java·服务器·前端
博语小屋2 小时前
程序(进程)地址空间(1)
linux
yunyi2 小时前
使用acme.sh来实现自动化申请和续订TLS证书
linux·nginx·docker
包达叔2 小时前
docker国内镜像源
运维·docker·容器
未来可期LJ3 小时前
【Linux 小实战】自定义 Shell 的编写
linux·服务器