C02S10-Linux的进程和计划任务管理

一、进程

1. 相关概念

  1. 程序:没有运行的代码,是指令和规则的集合,定义了要执行和操作的任务。
  2. 进程:正在运行的代码,是程序的执行实例。
  3. 线程:是计算机进行运算的最小单位,是进程中实际允许的单位。

2. 父进程和子进程

在操作系统中,父进程和子进程是描述进程之间创建和被创建关系。下面是父进程和子进程的具体关系:

父进程是创建另一个进程的进程。当一个进程创建一个新的进程时,它就成为了新进程的父进程。父进程可以控制子进程的创建、执行和终止,通常负责子进程的资源分配和同步。

子进程是由另一个进程(父进程)创建的进程,可以继承父进程的某些属性,如环境变量和文件描述符。子进程在创建时会复制父进程的代码和数据,但拥有自己的内存空间和执行状态。可以执行与父进程不同的任务,也可以与父进程通信和同步。

3. 进程查看命令

3.1 ps命令 -- 显示进程状态

ps命令来自英文单词process的缩写,功能是显示当前系统的进程状态。使用ps命令可以查看到进程的所有信息,例如进程的号码、发起者、系统资源(处理器与内存)使用占比、运行状态等。

bash 复制代码
ps 选项

常见的选项:

选项 功能
-a 显示所有进程
-u 显示进程的所属用户
-x 显示进程详细信息
-e 显示所有进程信息
-l 详细展示进程信息
-f 完整格式展示进程信息

进程的信息内容:

bash 复制代码
ps -aux

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.2 166868 11820 ?        Ss   09:14   0:01 /sbin/init splash
root           2  0.0  0.0      0     0 ?        S    09:14   0:00 [kthreadd]
  • USER:进程的所属用户。
  • PID:进程号,是进程的全局唯一标识。
  • %CPU:进程所占用的CPU资源百分比。
  • %MEM:进程所占用的内存资源百分比。
  • VSZ:进程使用的虚拟内存大小。
  • RSS:进程使用的物理内存大小。
  • TTY:进程所在的终端。
  • STAT:进程的当前状态。
    • S:休眠状态,可以中断。Ss表示进程有子进程。
    • T:停止状态。
    • D:不可中断的休眠状态。
    • Z:僵死状态。
    • I(大写的i):空闲状态。
    • <:进程的执行优先级较高。
    • N:进程的执行优先级较低。
    • l(小写的L):子进程的线程。
    • +:进程显示在前台。
  • START:进程启动的时间。
  • TIME:进程占用CPU的时间。
  • COMMAD:启动进程的命令。
bash 复制代码
ps -elf

F S UID          PID    PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root           1       0  0  80   0 - 41717 ep_pol 09:14 ?        00:00:01 /sbin/init splash
1 S root           2       0  0  80   0 -     0 kthrea 09:14 ?        00:00:00 [kthreadd]
  • F:标志位,进程的系统标记。
  • S:进程的状态。
  • UID:进程所属用户的ID。
  • PID:进程号。
  • PPID:父进程号。
  • C:进程对CPU的使用率。
  • PRI:进程的优先级。
  • NI:进程的nice值,影响进程的优先级。
  • ADDR:进程的内存地址。
  • SZ:进程使用的虚拟内存大小。
  • WCHAN:进程正在等待的内核函数或资源。
  • STIME:进程启动的时间。
  • TTY:进程所在的终端。
  • TIME:进程累计使用CPU的时间。
  • CMD:启动进程的命令。

ps -aux适用于查看进程占用的资源信息,ps -elf适用于查看进程在系统中的详细信息。

怎么查看一个进程在系统中的资源占用情况,以及占用CPU/内存过高,处理的方法?

  1. 使用ps -aux定位找到这个进程,获取PID号。

  2. 再使用ps -elf | grep PID号 查看进程的详细信息。

  3. 根据实际使用情况来处理。kill -9 PID号,强制杀死进程。
    怎么删除一个僵死进程?

  4. 僵死进程占用的资源不多,可以不用删除。

  5. 僵死进程无法使用kill -9强制杀死,一定要清除就需要重启设备。

3.2 top命令 -- 实时显示系统运行状态

top命令的功能是实时显示系统运行状态,包含处理器、内存、服务、进程等重要资产信息。

bash 复制代码
top [选项]

常见的选项:

选项 功能
-b 使用非交互模式
-n 指定显示的次数

交互页面的常见操作:

1:显示所有CPU的详情。

q:退出交互式页面。

进程的信息内容:

bash 复制代码
top

top - 11:16:27 up  2:01,  2 users,  load average: 0.00, 0.00, 0.00
任务: 297 total,   1 running, 296 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3870.6 total,   1886.6 free,    860.2 used,   1123.8 buff/cache
MiB Swap:   3898.0 total,   3898.0 free,      0.0 used.   2744.7 avail Mem

进程号 USER      PR  NI    VIRT    RES    SHR    %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  166868  11820   8236 S   0.0   0.3   0:01.46 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.02 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par
  • top - 11:16:27 up 2:01, 2 users, load average: 0.00, 0.00, 0.00:系统概览。

    • 11:16:27:系统当前时间。
    • up 2:01:系统已运行的时间。
    • 2 users:系统用户数量。
    • load average: 0.00, 0.00, 0.00:显示过去1分钟、5分钟和15分钟的平均负载。
  • 任务: 297 total, 1 running, 296 sleeping, 0 stopped, 0 zombie:进程详情。

    • 297 total:系统中总共有297个任务。
    • 1 running:有1个任务正在运行。
    • 296 sleeping:有296个任务处于睡眠状态。
    • 0 stopped:没有任务处于停止状态。
    • 0 zombie:没有僵尸进程。
  • %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st:CPU详情。

    • %Cpu(s): 0.0 us,用户空间占用CPU的百分比为0.0%。
    • 0.0 sy,内核空间占用CPU的百分比为0.0%。
    • 0.0 ni,改变过优先级的进程占用CPU的百分比为0.0%。
    • 100.0 id,CPU空闲的百分比为100.0%。
    • 0.0 wa,等待输入输出的CPU百分比为0.0%,也就是磁盘的读写性能。
    • 0.0 hi,硬件中断的CPU百分比为0.0%。
    • 0.0 si,软件中断的CPU百分比为0.0%。
    • 0.0 st,虚拟环境中,其他虚拟机占用的CPU百分比为0.0%。
  • MiB Mem : 3870.6 total, 1886.6 free, 860.2 used, 1123.8 buff/cache:内存详情。

    • MiB Mem : 3870.6 total,总内存为3870.6 MiB。
    • 1886.6 free,空闲内存为1886.6 MiB。
    • 860.2 used,已使用的内存为860.2 MiB。
    • 1123.8 buff/cache,用作缓冲区和缓存的内存为1123.8 MiB。
  • MiB Swap: 3898.0 total, 3898.0 free, 0.0 used. 2744.7 avail Mem:虚拟内存详情。

    • MiB Swap: 3898.0 total,总虚拟内存大小为3898.0 MiB。
    • 3898.0 free,空闲虚拟内存为3898.0 MiB。
    • 0.0 used,已使用的虚拟内存大小为0.0 MiB。
    • 2744.7 avail Mem,可用的虚拟内存大小为2744.7 MiB。
  • 进程号:进程全局的唯一标识。

  • USER:进程的所属用户。

  • PR:进程的优先级。

  • NI:nice值,用于调整进程的优先级。

  • VIRT:进程使用的虚拟内存大小。

  • RES:进程使用的常驻内存大小。

  • SHR:进程使用的共享内存大小。

  • %CPU:进程占用的CPU百分比。

  • %MEM:进程占用的内存百分比。

  • TIME+:进程占用CPU的总时间。

  • COMMAND:启动进程的命令。

3.3 pgrep命令 -- 检索进程PID号

pgrep命令来自英文词组"process global regular expression print"的缩写,功能是用于检索进程PID号。

bash 复制代码
pgrep [选项] 进程名

常见的选项:

选项 功能
-a 显示进程的PID和详细信息
-c 统计进程的数量
-f 匹配进程名

3.4 jobs命令 -- 显示终端后台的作业信息

jobs命令来自英文单词"job",功能是用于显示终端后台的进程信息。

bash 复制代码
jobs [选项]

常见的选项:

选项 功能
-l 显示后台进程和进程号
-n 显示上次查看后状态变化的进程
-r 显示正在运行的进程
-s 显示已经停止的进程

3.5 pstree命令 -- 以树状图形式显示进程信息

pstree命令来自英文词组"display a tree of processes"的缩写,功能是用于以树状图形式显示进程信息。

bash 复制代码
pstree [选项]

常见的选项:

选项 功能
-u 显示进程所属用户
-p 显示进程的PID

4. 系统五大负载指标

4.1 CPU

查看CPU负载的命令有:top、htop。

4.2 内存

查看内存负载的命令有:free、top。

清理内存的缓存:echo 1 > /proc/sys/vm/drop_caches

4.3 磁盘

查看内存负载的命令有:iostat。

4.4 网络

查看网络负载的命令有:ifconfig、iftop。

4.5 进程

查看进程负载的命令有:top、ps。

二、定时任务

1. crontab命令-- 管理定时计划任务

在Linux系统中,cron是负责执行定时任务的服务。它使用crontab命令来管理定时任务,每个用户都有一个对应的 crontab 文件,允许该用户设置定时任务。

bash 复制代码
crontab [选项]

常见的选项:

选项 功能
-e 编辑任务
-l 查看任务
-r 删除任务
-u 设置用户

在Ubuntu系统中,基本上第一次使用crontab命令编辑定时任务,会提示选择文本编辑器。默认是nano,可以根据习惯选择vim编辑器。如果没有提示设置,则可以使用select-editor命令,选择crontab的编辑器。

除此之外,crontab 任务的标准输出和标准错误默认情况下是发送到 /dev/null 的,这意味着不会在终端或任何地方看到输出结果。要想看到数据结构,则需要在设置定时任务时,指定标准输出和标准输入的重定向文件。

2. crontab任务基本格式

shell 复制代码
分钟 小时 日期 月份 星期 命令
  • 时间可以使用*字符表示,也就是表示任意时间。
  • 分钟:范围是0-59。
  • 小时:范围是0-23。
  • 日期:范围是1-31。、
  • 月份:范围是1-12。
  • 星期:范围是0-7,0和7都可以表示星期日。
  • 命令:定时执行的命令或脚本等。

3. 定时任务常见操作

  1. 每分钟执行一次任务。

    bash 复制代码
    crontab -e
    
    * * * * * 命令
  2. 每个小时执行一次任务,这里是每个小时整点的时候执行任务。

    bash 复制代码
    crontab -e
    
    0 * * * * 命令
  3. 每天执行一次任务,这里是每天的00:00时执行任务。

    bash 复制代码
    crontab -e
    
    0 0 * * * 命令
  4. 每周执行一次任务,这里是每周星期一的00:00时执行任务。

    bash 复制代码
    crontab -e
    
    0 0 * * 1 命令
  5. 每月执行一次任务,这里是每个月1号的00:00时执行任务。

    bash 复制代码
    crontab -e
    
    0 0 1 * * 命令
  6. 每隔三天执行一次任务。

    bash 复制代码
    crontab -e
    
    0 0 */3 * * 命令
    • */3:这里表示每3天。
  7. 每天的上午8点和下午3点各执行一次任务。

    bash 复制代码
    crontab -e
    
    0 8,15 * * * 命令
    • 8,15:表示8点和15点。
  8. 每天8点到11点之间的整点时,执行指定任务。

    bash 复制代码
    crontab -e
    
    0 8-11 * * * 命令
相关推荐
Syclus14 分钟前
成功解决WSL2上的Ubuntu22.04执行sudo apt-get update指令报错问题
linux·运维·服务器
kaoa00015 分钟前
Linux入门攻坚——36、Linux防火墙-iptables-2
linux·运维
小林熬夜学编程1 小时前
【Linux系统编程】第四十二弹---多线程编程全攻略:涵盖线程创建、异常处理、用途、进程对比及线程控制
linux·服务器·c语言·开发语言·c++
Linux运维老纪2 小时前
K8s资源对象监控之kube-state-metrics详解(Detailed Explanation of Kube State Metrics)
网络·安全·云原生·容器·kubernetes·云计算·运维开发
188_djh3 小时前
# vim那些事...... vim删除文件全部内容
linux·ubuntu·centos·编辑器·vim·vi·vim删除文件全部内容
小安运维日记4 小时前
Linux云计算 |【第五阶段】PROJECT3-DAY1
linux·运维·安全·云计算
Ultipa4 小时前
揭秘云计算 | 2、业务需求推动IT发展
云计算