【Linux入门】Linux五大负载以及相关基础命令详解(含示例)

Linux的五大负载

主要包括CPU负载、内存负载、磁盘负载、网络负载和进程负载。

1. CPU负载

优化方法

  • 使用监控工具:如top、htop等,可以实时查看CPU的占用情况,并识别出占用CPU资源较多的进程。
  • 优化代码:对于占用CPU资源过多的进程,可以考虑优化其代码,减少不必要的计算或循环。
  • 增加CPU核心:如果系统负载高是因为CPU数量不足造成的,可以考虑增加CPU核心数。

相关工具

  • top:显示系统中各个进程的资源占用情况,包括CPU、内存等。
  • htop:top命令的增强版,提供了更丰富的功能和更友好的用户界面。

CPU资源查询的相关命令(有端联想)

  • top
  • ps
  • pgrep
  • lsof
  • cat /proc/cpuinfo
  • uname -r

2. 内存负载

优化方法

  • 使用监控工具:如free、top等,可以查看内存的使用情况,识别出内存占用较大的进程。
  • 优化应用程序:分析应用程序中的内存泄漏情况,并进行优化。
  • 增加内存:如果系统内存不足,可以考虑增加物理内存。
  • 清理缓存:使用echo 1 > /proc/sys/vm/drop_caches命令释放缓存(注意:此命令通常仅在需要时才使用,因为频繁清理缓存可能会降低文件系统的性能)。

相关工具

  • free:显示系统的总内存、已用内存、空闲内存等信息。
  • top:同上,也可查看内存占用情况。

内存资源查询的相关命令(有端联想)

  • free -m
  • top
  • cat /proc/meminfo | grep mem
  • cat /proc/vmstat

3. 磁盘负载

优化方法

  • 使用监控工具:如iostat、iotop等,可以监控磁盘的读写性能和占用情况。
  • 优化磁盘IO:对于磁盘IO性能瓶颈,可以考虑优化磁盘的读写策略,如使用RAID技术、增加磁盘缓存等。
  • 清理磁盘空间:定期清理不必要的文件和日志,释放磁盘空间。

相关工具

  • iostat:监控磁盘IO性能。
  • iotop:动态监控进程占用磁盘的读写情况。

磁盘资源查询的相关命令(有端联想)

  • df
  • du
  • fdisk
  • lsblk
  • swapon/off
  • cat /proc/diskstat
  • cat /proc/mdstat

4. 网络负载

优化方法

  • 使用监控工具:如iftop、nload等,可以监控网络带宽的使用情况。
  • 优化网络配置:调整TCP/IP协议栈的参数,优化网络连接的性能。
  • 使用加速器:如负载均衡器、代理服务器等,可以提高网络带宽的使用效率。

相关工具

  • iftop:动态监控网络流量数据。
  • nload:显示实时网络带宽使用情况。

网络资源查询的相关命令(有端联想)

  • netstat
  • nmap
  • ifconfig / ip addr
  • ping
  • tcpdump

5. 进程负载

优化方法

  • 使用监控工具:如top、htop、ps等,可以查看进程的资源占用情况。
  • 管理进程:对于占用资源过多的进程,可以考虑优化其执行逻辑或限制其资源使用。
  • 使用定时任务:通过crontab等工具设置定时任务,自动管理进程的执行和退出。

相关工具

  • tophtop:同上,用于查看进程资源占用情况。
  • ps:显示当前系统中的进程状态。
  • crontab:设置定时任务。

综上所述,Linux的五大负载优化需要综合考虑系统的各个方面,通过合理的监控、分析和调整,以达到提升系统性能和稳定性的目的。

进程信息查询的相关命令(有端联想)

  • top(动态)
  • ps -elf / -aux(静态)
  • pgrep
  • pstree
  • lsof
  • jobs(后台进程)

常用的相关命令

ps命令-获取系统中正在运行的进程的详细信息

ps命令是Linux和Unix系统中用于显示当前进程状态的工具,全称为“Process Status”。通过该命令,用户可以获取系统中正在运行的进程的详细信息,包括进程ID、CPU使用率、内存占用等。

常用选项及其含义

选项含义
-e, -A显示所有进程(包括其他用户的进程)。
-f全格式显示进程信息,包括UID、PID、PPID、C、STIME、TTY、TIME和CMD等。
-l长格式显示进程信息,比-f选项更详细,但通常不包含内存和CPU使用率。
-u显示指定用户的进程信息。
-p显示指定PID的进程信息。
-x显示所有进程,包括没有控制终端的进程。
-aux结合了a、u和x选项的功能,以用户友好的格式显示所有进程的详细信息。
–sort根据指定的列对输出进行排序。例如,--sort=-%mem表示按内存使用率降序排序。
-o自定义输出格式,允许用户指定要显示的列。

示例

  1. 显示当前用户的所有进程

    ps
    

    注意:此命令默认输出可能因环境而异,通常显示当前终端会话中的进程。

  2. 显示系统中所有进程的详细信息

    ps -ef
    

    输出将包括所有进程的UID、PID、PPID、C、STIME、TTY、TIME和CMD等字段。

  3. 按内存使用率降序排序显示所有进程

    ps -eo pid,%mem,cmd --sort=-%mem
    

    此命令将仅显示进程ID、内存使用率和命令行,并按内存使用率从高到低排序。

  4. 显示指定用户的进程

    ps -u username
    

    username替换为实际用户名,以显示该用户的所有进程。

  5. 显示指定PID的进程信息

    ps -p PID
    

    PID替换为实际进程ID,以显示该进程的详细信息。

输出示例解析——以ps -auxps -elf为例

ps -aux

输出示例(实际输出可能因Linux发行版而异):

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 194064 10484 ?        Ss   05:01   0:02 /sbin/init
root         2  0.0  0.0      0     0 ?        S    05:01   0:00 [kthreadd]
...
username  1234  0.5  1.2 234567 89101 pts/0    Ss   08:10   0:01 /bin/bash
...

字段含义

  • USER:运行进程的用户名。
  • PID:进程ID,唯一标识一个进程。
  • %CPU:进程占用的CPU百分比。
  • %MEM:进程占用的物理内存百分比。
  • VSZ:虚拟内存大小,包括进程使用的代码、数据、栈等,以KB为单位。
  • RSS:常驻集大小,即进程当前占用的物理内存量(不包括交换空间),以KB为单位。
  • TTY:进程关联的终端类型。问号(?)表示该进程没有关联到任何终端。
  • STAT:进程状态,如S(睡眠)、R(运行)、Z(僵尸)等。
  • START:进程启动时间。
  • TIME:进程自启动以来占用的CPU时间。
  • COMMAND:启动进程的命令行名称或命令。
ps -elf

输出示例(注意:实际输出可能因Linux发行版而异):

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  80   0 -  12976 -      05:01 ?        00:00:02 /sbin/init
1 S root         2     0  0  80   0 -      0 -      05:01 ?        00:00:00 [kthreadd]
...
1 S username  1234  1235  0  20   0 -  12345 wait   08:10 pts/0    00:00:01 /bin/bash
...

字段含义

  • F:进程标志,通常用于表示进程的一些特殊状态或属性,但具体含义可能因系统而异。
  • S:进程状态,如S(睡眠)、R(运行)等,但这里与STAT字段略有不同,因为它可能更侧重于内核级别的状态表示。
  • UID:运行进程的用户ID。
  • PID:进程ID,唯一标识一个进程。
  • PPID:父进程ID,表示创建该进程的父进程。
  • C:CPU使用率的一个估算值,表示进程使用的CPU时间片数量。
  • PRI:进程的优先级。
  • NI:进程的Nice值,用于调整进程的优先级。
  • ADDR:进程的内存地址,但通常这个字段在ps -elf输出中可能不直接显示有效的内存地址。
  • SZ:进程使用的物理内存的大小(以页面为单位),但具体单位可能因系统而异。
  • WCHAN:进程正在等待的事件或资源,如果进程正在睡眠,则显示其等待的通道名。
  • STIME:进程启动时间。
  • TTY:进程关联的终端类型。
  • TIME:进程自启动以来占用的CPU时间。
  • CMD:启动进程的命令行名称或命令。

top命令-查看动态的进程统计信息

top命令简述

top命令是Linux和Unix系统下用于实时显示系统中各个进程的资源占用状况的命令,类似于Windows的任务管理器。它提供了系统的整体性能信息和当前正在运行的进程的详细信息,并允许用户进行排序、过滤等操作以获取所需的信息。

基础格式

top [-选项]

其中,-选项是可选的,用于指定top命令的行为。如果不带任何选项,top将以默认模式运行。

常用选项

选项含义
-d 秒数指定top命令刷新的时间间隔(秒)。
-n 次数指定top命令运行并刷新的次数后退出。
-p 进程ID仅显示指定进程ID的进程信息。
-u 用户名仅显示指定用户名的进程信息。
-b批处理模式,将结果输出到标准输出或文件,而不是在终端中显示。
-c显示完整的命令行,而不是截断。
-H显示线程信息。
-i忽略闲置和僵尸进程。
-o 字段根据指定的字段对进程进行排序。

使用示例

  1. 默认启动:直接输入top并回车。
  2. 每5秒刷新一次top -d 5
  3. 运行3次后退出top -n 3
  4. 仅显示用户名为user的进程top -u user

输出示例及字段含义

top 命令是 Linux 和类 Unix 系统中一个非常强大的实时监控系统性能的工具。它显示了系统中进程的动态管理视图,包括 CPU、内存使用情况,以及运行中的进程等信息。以下是一个 top 命令输出的示例,以及每个字段的详细含义。

top 输出示例

top - 12:34:56 up 2 days,  4:10,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 204 total,   1 running, 203 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.5 us,  0.5 sy,  0.0 ni, 98.8 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
MiB Mem :   8192.0 total,   1234.0 free,   5678.0 used,   1280.0 buff/cache
MiB Swap:   2048.0 total,    512.0 free,   1536.0 used.   2500.0 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1234 user1     20   0 2322704 1.214g  1436 S   0.3  15.6   0:11.12 firefox
 2345 user2     20   0  860232 341m   28m S   0.0  4.3   0:02.34 gnome-terminal
 ...
字段含义
1. 顶部信息行
  • 时间戳 (top - 12:34:56):显示top命令被调用的确切时间。
  • 系统运行时间 (up 2 days, 4:10):表示系统自上次启动以来已经运行了多少天、小时和分钟。
  • 用户登录数 (2 users):当前登录到系统的用户数量。
  • 负载平均值 (load average: 0.00, 0.01, 0.05):分别表示在过去1分钟、5分钟和15分钟内,系统处于运行状态和不可中断状态的平均进程数。这个数值提供了系统负载的即时和历史视图,有助于了解系统的繁忙程度。

关于Load Average的解读

  • 小于1:
    当Load Average的值小于1时,表示系统的负载较轻,CPU资源相对充足,系统能够轻松处理当前的负载。
  • 等于1:
    当Load Average的值等于1时,表示系统的负载达到了一个平衡点,即每个CPU核心都在满负荷工作。此时,系统仍然能够处理新的负载,但可能需要开始考虑优化或增加资源。
  • 大于1:
    当Load Average的值大于1时,表示系统的负载超过了CPU核心的处理能力。此时,系统可能会出现性能瓶颈,导致响应速度变慢或任务执行延迟。
  • 超过CPU核心数(大于1且小于5):
    如果Load Average的数值超过了系统的CPU核心数,那么系统就处于过载状态。这种情况下,系统可能无法及时处理所有任务,导致性能显著下降。

实际应用中的判断标准:

  • 一些建议认为在多核系统中,理想的Load Average值应该低于CPU核心数的0.7倍(即Load Average < CPU核心数 * 0.7)。这个值可以作为一个参考,但并不是绝对的标准。实际上,合理的Load Average值需要根据系统的具体情况进行调整。
    • 低负载:Load Average小于0.7*CPU逻辑核数,表示系统非常空闲,可以考虑增加新的服务或任务。
    • 正常负载:Load Average在(0.7~1)*CPU逻辑核数,表示系统状态良好,能够处理当前负载。(当平均负载持续大于 0.7*CPU 逻辑核数,就需要开始调查原因,防止系统恶化。当平均负载持续大于 1.0*CPU 逻辑核数,必须寻找解决办法,降低平均负载。)
    • 高负载:Load Average大于1*CPU 逻辑核数,表示系统负载较重,需要关注系统性能并考虑优化。
    • 过载:Load Average超过CPU核心数(5),表示系统已经过载,需要立即采取措施减轻负载。(当平均负载持续大于 5.0*CPU 逻辑核数,表明系统已出现严重问题,长时间未响应,或者接近死机。)
2.任务(Tasks)和CPU信息
  • 任务总数 (Tasks: 204 total):当前系统中的进程总数。
  • 运行状态
    • 1 running:当前处于运行状态的进程数(实际上,由于时间片轮转机制,任何时刻通常只有一个进程在CPU上运行,但top可能显示多个进程处于“running”状态,因为它们的调度时间片很快就要到来)。
    • 203 sleeping:处于睡眠状态的进程数,等待某些事件发生(如I/O操作完成)以继续执行。
    • stoppedzombie:分别表示停止(通常是因为接收到了停止信号)和僵尸(已经结束但父进程尚未回收其资源的)进程的数量。
  • CPU使用情况 (%Cpu(s): 0.5 us, 0.5 sy, ...):
    • us(用户空间):表示在用户模式下运行的时间百分比。
    • sy(系统空间):表示在内核模式下运行的时间百分比。
    • ni(改变过优先级的进程):表示通过nice值改变的进程占用的CPU时间百分比。
    • id(空闲):表示CPU空闲的时间百分比。
    • wa(I/O等待):表示CPU等待I/O操作完成的时间百分比。
    • hi(硬件中断):表示处理硬件中断的时间百分比。
    • si(软件中断):表示处理软件中断(如系统调用)的时间百分比。
    • st(被虚拟机偷走的时间):在虚拟化环境中,这个值表示CPU时间被宿主操作系统或虚拟机管理程序占用的百分比(不是所有系统都显示这个值)。
3.内存和交换区信息
  • 物理内存 (MiB Mem : 8192.0 total, ...):
    • total:物理内存总量。
    • free:未被使用的物理内存量。
    • used:已被进程使用的物理内存量(不包括缓冲/缓存)。
    • buff/cache:用作缓冲和缓存的物理内存量。这部分内存可以被回收用于新进程,因此它实际上减少了需要交换(swap)的需求。
  • 交换空间 (MiB Swap: 2048.0 total, ...):
    • total:交换空间总量。
    • free:空闲的交换空间量。
    • used:已使用的交换空间量。
    • avail Mem:估计的可用内存量,考虑了物理内存、交换空间以及缓冲/缓存的影响。这个值提供了关于系统是否有足够内存来处理新任务的即时信息。
4.进程列表
  • PID:进程ID,是系统中每个进程的唯一标识符。
  • USER:运行该进程的用户名。
  • PRNI:PR(优先级)和NI(nice值)共同决定了进程被CPU调度的优先级。NI值越低,PR值越低,进程越有可能获得CPU时间。
  • VIRTRESSHR:分别表示进程的虚拟内存大小、常驻内存大小和共享内存大小。
  • S:进程状态,常见的状态有R(运行)、S(睡眠)、T(停止)和Z(僵尸)。
  • %CPU%MEM:分别表示进程占用的CPU和物理内存的百分比。
  • TIME+:进程自启动以来占用的CPU时间总和,格式为分钟:秒.百分之一秒
  • COMMAND:启动进程的命令行名称或命令。有时,如果命令太长,它可能会被截断。

注意,top 命令的输出是实时更新的,通常每几秒钟刷新一次,以显示最新的系统状态。可以通过按 q 键退出 top 命令。

些常用的top交互界面指令:

  1. 刷新和退出

    • s:修改屏幕刷新的时间间隔。按下s后,系统会提示用户输入新的刷新时间(以秒为单位)。较小的值表示更频繁的刷新,较大的值表示较少的刷新。
    • q:退出top命令。在任何时候,按下q键都可以退出top命令,返回到命令行界面。
  2. 排序和过滤

    • P:以CPU使用率对进程进行排序。这使得用户可以快速找到当前占用CPU最多的进程。
    • M:以内存使用率对进程进行排序。对于查找内存使用异常高的进程非常有用。
    • T:根据时间/累计时间对进程进行排序。可以了解哪些进程运行了最长的时间。
    • o:过滤进程。按下o后,用户可以输入一个表达式来过滤显示的进程列表,只显示满足条件的进程。
  3. 显示选项

    • t:切换显示任务及CPU信息。默认情况下,top会显示CPU的使用情况,但按下t键后,可以隐藏或显示这部分信息。
    • m:切换显示内存信息。类似于t键,m键用于控制内存使用情况的显示。
    • l:隐藏或显示uptime信息。uptime信息通常包括系统已运行的时间、登录用户数以及系统的平均负载。
    • 1:显示每个CPU核心的详细信息。如果系统有多个CPU核心,按下1键后,top会为每个核心单独显示一行信息。
  4. 其他操作

    • k:终止进程。通过按下k键,用户可以输入要终止的进程的PID(进程ID),并发送一个信号来终止该进程。默认使用的是SIGTERM(信号15),但也可以选择其他信号。
    • r:修改进程优先级。虽然这不是top的直接功能,但用户可以通过top找到进程的PID,然后使用renice命令来修改其优先级。
    • h:显示帮助信息。按下h键会列出所有可用的交互指令及其功能描述,帮助用户更好地使用top命令。
  5. 高级功能

    • W:将当前的top配置写入~/.toprc文件中。这样,下次启动top时,它会自动加载这些配置。
    • f:进入字段管理界面,允许用户自定义top命令的输出字段。用户可以选择显示或隐藏特定的列,以满足不同的监控需求。

pgrep命令-查看进程的信息

基础格式:

pgrep [options] <pattern>

其中,<pattern> 是你要搜索的进程名称或相关模式的字符串。pgrep会根据这个模式来搜索系统中正在运行的进程,并显示这些进程的ID。

常用选项(Markdown表格)

选项描述
-l, --list-name显示进程ID和进程名称,而不仅仅是进程ID。
-o, --oldest显示最旧的(启动时间最长的)匹配进程。
-n, --newest显示最新的(最后启动的)匹配进程。
-f, --full使用完整的命令行来匹配进程,而不仅仅是进程名。
-d, --delimiter设置用于分隔输出中每个进程ID的字符串(默认为换行符)。
-P, --parent只匹配指定父进程ID的进程。
-u, --euid匹配具有指定有效用户ID的进程。可以使用数值或符号值。
-U, --uid匹配具有指定实际用户ID的进程。可以使用数值或符号值。
-g, --pgroup只匹配指定进程组ID的进程。进程组0被转换为pgrep或pkill自己的进程组。
-G, --group只匹配具有指定实际组ID的进程。可以使用数值或符号值。
-v, --inverse反转匹配条件,即选择不匹配指定模式的进程。
-x, --exact完全匹配进程名。默认情况下,pgrep使用模糊匹配。
-c统计匹配进程的数量,而不是列出它们。

除了上述常用选项外,pgrep还提供了其他一些选项:

  • -s, --session:只匹配指定会话ID的进程。
  • -t, --terminal:只匹配指定终端上的进程。
  • -h, --help:显示帮助信息。
  • -V, --version:显示pgrep的版本信息。

使用示例

  1. 显示指定进程名的进程ID

    pgrep bash
    

    这会列出所有名为bash的进程的ID。

  2. 显示指定进程名的进程ID和名称

    pgrep -l bash
    

    这会列出所有名为bash的进程的ID和名称。

  3. 选择并显示最新启动的bash进程

    pgrep -ln bash
    

    使用-l显示进程名和ID,-n选择最新的进程。

  4. 使用完整命令行匹配进程
    假设你想找到所有启动参数中包含-Xmx4g的java进程,可以使用:

    pgrep -f '-Xmx4g'
    

    这里-f选项使得pgrep能够基于完整的命令行参数来匹配进程。

  5. 反转匹配条件
    如果你想找到所有不是bash的进程,可以使用:

    pgrep -v bash
    

    这里-v选项反转了匹配条件。

jobs命令

jobs 命令特别是在使用作业控制(job control)功能时。作业控制允许用户启动多个后台进程(即在后台运行的程序或命令),并在需要时暂停、恢复或终止这些进程。

基本用法

  • 列出当前 shell 会话中的后台作业
    当你在 shell 中运行一个命令并在其后加上 & 符号时,该命令将在后台执行。使用 jobs 命令可以列出当前 shell 会话中所有正在运行或已停止的后台作业。
    jobs
    
  • 显示作业的状态
    jobs 命令会显示每个作业的进程ID(PID)、作业号(Job Number)以及作业的状态(如运行中、已停止)。作业状态通常包括 Running(运行中)、Stopped(已停止)等。

选项

选项含义
-l--long以长格式显示作业信息,包括 PID。
-n仅显示最近一次通知状态发生变化的作业。
-p仅显示作业的 PID,不显示其他信息。
-r仅显示正在运行的作业。
-s仅显示已停止的作业。

示例

  1. 启动后台作业
    sleep 100 &
    
    这个命令会让 sleep 命令在后台运行,持续时间为 100 秒。
  2. 查看后台作业
    jobs
    
    输出可能类似于:
    [1]+  Running                 sleep 100 &
    
    这里,[1]+ 是作业号,Running 是作业状态,sleep 100 & 是启动作业的命令。
  3. 停止和恢复作业
    你可以使用 kill -STOP %作业号 命令来停止一个后台作业,使用 fg %作业号bg %作业号 命令来将作业恢复到前台或继续在后台运行。
    kill -STOP %1
    jobs
    # 然后使用 fg %1 或 bg %1 来恢复作业
    

jobs 命令是 shell 作业控制功能的重要组成部分,它提供了查看和管理后台作业的直接方式。

pstree命令-查看进程树

pstree命令在Linux系统中是一个非常有用的工具,用于以树状图的形式显示进程之间的派生关系,帮助用户更好地了解系统中运行的进程以及它们之间的关系。

一、命令功能

  • pstree以树状图显示系统中的进程关系,每个进程都被视为一个节点,通过连接线展示父子关系。
  • 它能清晰地表达程序间的相互关系,使用户能够直观地看到哪些进程是父进程,哪些是子进程。

二、命令语法

基本语法:

pstree [选项] [PID|USER]
  • 如果不指定PID(进程ID)或USER(用户名),则会把系统启动时的第一个进程(通常是init或systemd)视为基层,并显示之后的所有进程。
  • 若指定了用户名称,则会以隶属该用户的第一个程序作为基层,然后显示该用户的所有进程。

三、常用选项

  • -a显示每个程序的完整指令,包含路径、参数或是常驻服务的标示。
  • -c:不使用精简标示法,显示完整的进程名。
  • -G:使用VT100终端机的列绘图字符来绘制树状图。
  • -h:特别标明现在执行的程序。
  • -H <程序识别码>:特别标明指定的程序,与-h类似但更具体。
  • -l:采用长列格式显示树状图,避免信息被截断。
  • -n:用程序识别码排序,而不是默认的以程序名称排序。
  • -p显示程序识别码(PID),即进程ID。
  • -u:显示用户名称,每个进程后面都会显示其所属的用户。
  • -U使用UTF-8列绘图字符来绘制树状图。
  • -V:显示版本信息。

四、示例

  1. 显示当前系统上所有进程的树状图(默认格式):
    pstree
    
    输出可能类似于:
    systemd─┬─NetworkManager─┬─dhclient
             │                ├─{NetworkManager}
             ├─sshd───sshd───bash───pstree
             ├─systemd-journal
             ├─systemd-logind
             ├─systemd-udevd
             └─tuned───4*[{tuned}]
    
  2. 显示每个程序的完整指令
    pstree -a
    
    这将展示每个进程的完整命令行,包括路径和参数。
  3. 显示进程的PID
    pstree -p
    
    输出中会在每个进程名后面显示其PID,如systemd(1)─┬─NetworkManager(680)
    4.以树状图的形式显示进程之间的派生关系,并且会附加显示每个进程的完整信息、用户名以及进程ID(PID)

五、注意

  • pstree命令的输出可能因系统环境和当前运行的进程而异。
  • 在某些系统中,如果未安装psmisc包,则可能无法直接使用pstree命令。此时,可以通过安装psmisc包来获得pstree命令。
    pstree命令是Linux系统管理和监控的重要工具之一,通过它,用户可以清晰地看到系统中进程之间的层次结构和关系,从而更好地理解和管理系统。

进程

进程的启动方式

在Linux系统中,进程的启动方式主要有以下几种:

1. 手工启动进程

手工启动进程指的是由用户通过输入命令直接启动一个进程。这种方式又可以细分为前台启动和后台启动两种方式:

  • 前台启动:当用户输入一个命令并运行,该命令就会启动一个前台进程。此时,用户需要等待该进程执行完成或者手动将其放到后台运行,才能执行其他命令。
  • 后台启动:为了不影响用户继续执行其他命令,可以将进程放到后台运行。这通常通过在命令的末尾添加&符号来实现,或者使用nohup命令来在后台启动进程,并使其在用户注销后继续运行。

2. 调度启动进程

调度启动进程是指根据用户的设置,让进程在指定的时间、日期或者系统满足特定条件(如系统平均负载量低于指定值)时自动启动。Linux系统提供了多种工具来实现调度启动,包括crontabat等。

  • crontab:是一个用于设置周期性被执行的任务的工具。用户可以将需要定时执行的命令添加到crontab文件中,系统就会按照设定的时间间隔自动执行这些命令。
  • at:允许用户安排一次性的任务在未来的某个时间点执行。与crontab相比,at更适合于只需要执行一次的任务。

3. 使用系统启动脚本

Linux系统中的大部分进程都是通过系统启动脚本进行启动的。这些启动脚本通常存储在/etc/init.d(传统SysV初始化系统)或/etc/systemd/system(systemd初始化系统)等目录下。用户可以使用service(对于SysV)、systemctl(对于systemd)等命令来管理这些启动脚本,从而控制相关进程的启动、停止和重启。

4. 使用systemd或Upstart

  • systemd:是Linux系统中最新的初始化系统和服务管理器,用于替代传统的SysV初始化系统。它提供了强大的功能来启动、停止和管理系统进程,包括守护进程(daemon)、系统服务等。用户可以通过systemctl命令来管理systemd下的进程。
  • Upstart:是一种事件驱动的初始化系统,它是Ubuntu等系统中默认的初始化系统之一。与systemd类似,Upstart也提供了启动、停止和管理系统进程的功能,但使用的是不同的配置文件和命令(如initctl)。

5. 编程方式启动

在编程中,也可以使用系统调用或库函数来启动新进程。例如,在C语言中,可以使用fork()函数来创建一个新的子进程,然后使用exec()系列函数来在子进程中执行新的程序。这种方式允许程序在运行时根据需要动态地启动其他进程。

进程的前后台调度

在Linux系统中,进程的前后台调度是进程管理的重要方面。前台进程是用户当前正在操作的进程,而后台进程则是在用户不直接干预的情况下运行的进程。以下是进程前后台调度相关的命令及它们的基础用法:

1. 前台到后台的调度

  • Ctrl+Z 组合键

    • 功能:将当前正在运行的前台进程挂起(即停止执行),并放入后台的任务列表中。此时,进程处于停止(Stopped)状态。
    • 用法:在命令行中运行一个前台进程时,按下Ctrl+Z组合键即可将该进程挂起。
  • & 符号(用于启动时就放在后台):

    • 功能:在命令的末尾添加&符号,可以使该命令在后台启动并执行。
    • 用法:例如,cp /dev/cdrom mycd.iso &命令会在后台执行文件复制操作。

2. 后台到前台的调度

  • fg 命令

    • 功能:将后台进程恢复到前台运行。可以指定任务序号来恢复特定的后台进程。
    • 用法fg [任务序号]。如果不指定任务序号,则默认恢复最近一个被挂起的后台进程。
    • 示例fg 1会将任务序号为1的后台进程恢复到前台运行。
  • jobs 命令

    • 功能:查看当前处于后台的任务列表。可以使用-l选项来显示任务的PID。
    • 用法jobs [-l]
    • 示例jobs命令会列出所有后台任务及其状态,jobs -l则会额外显示每个任务的PID。

3. 后台任务的持续运行

  • nohup 命令
    • 功能:用于在用户注销或终端关闭后,继续运行相应的命令。它可以将命令的输出重定向到一个文件中,避免在终端关闭后无法查看命令的输出。
    • 用法nohup 命令 &
    • 示例nohup ./my_script.sh &会在后台运行my_script.sh脚本,并在用户注销或终端关闭后继续执行。

4. 注意

  • 当使用Ctrl+Z将进程挂起后,可以使用bg命令将进程放入后台继续执行,但通常这种用法较少见,因为&符号在启动时就已经将进程置于后台。
  • fgbg命令通常用于与Ctrl+Z&配合使用,以实现更灵活的进程调度。
  • nohup命令特别适用于需要长时间运行且不希望被终端会话影响的命令。

终止进程的运行

1. kill命令

功能kill命令用于向一个或多个进程发送信号,通常用于终止进程。
用法

  • 终止指定PID的进程:kill [信号] PID。默认情况下,kill命令发送SIGTERM(信号15)给进程,请求进程正常退出。如果进程不响应,可以使用-9选项发送SIGKILL(信号9)强制终止进程,但这可能导致进程没有正确释放资源。

示例

  • 终止PID为1234的进程:kill 1234
  • 强制终止PID为1234的进程:kill -9 1234
  • 使用进程名(需要配合其他命令,如pgreppidof来获取PID):由于kill命令本身不直接支持通过进程名终止进程,但可以通过pgreppidof命令结合管道(|)来实现。例如,kill $(pgrep firefox)将终止所有名为firefox的进程。

2. killall命令

功能killall命令根据进程名来终止进程,与kill命令不同,它不需要知道进程的PID。
用法

  • 终止指定名称的所有进程:killall [信号] 进程名。与kill命令类似,默认情况下发送SIGTERM信号。

示例

  • 终止所有名为firefox的进程:killall firefox

3. pkill命令

功能pkill命令也是根据进程名来终止进程,但它比killall更灵活,支持使用正则表达式匹配进程名。
用法

  • 终止匹配指定模式的所有进程:pkill [信号] [模式]

示例

  • 终止所有以chrome开头的进程:pkill chrome
  • 使用正则表达式终止进程(假设需要更复杂的匹配):pkill -f 'pattern',其中-f选项表示按照完整命令行来匹配进程。

4. 其他方法

  • Ctrl+C:在终端中,使用Ctrl+C组合键可以终止当前前台运行的命令或进程。但这通常用于终止由用户启动的交互式进程。
  • top或htop命令:这些命令提供了实时监视系统中进程和资源使用情况的功能。在tophtop界面中,可以找到需要终止的进程的PID,然后使用kill命令来终止它。htoptop提供了更友好的用户界面和更多的功能。
  • systemctl命令:对于由systemd管理的服务,可以使用systemctl stop 服务名来停止服务。虽然这不是直接终止进程,但停止服务通常会终止与该服务相关的所有进程。

注意

  • 终止进程前,请确保该进程是可以被安全终止的,以免造成数据丢失或系统不稳定。
  • 某些进程可能由系统关键服务所依赖,终止这些进程可能会影响系统的正常运行。
  • 在使用强制终止选项(如kill -9)时要特别小心,因为它可能导致进程没有正确释放资源。
  • 对于图形界面应用程序,有时可能需要使用特定的工具或命令(如xkill)来终止。但xkill主要用于在图形界面中通过鼠标点击来终止应用程序,而不是通过命令行。

at命令-计划任务管理

at-计划任务管理是Linux系统中一种用于设置一次性计划任务的功能。

一、基本概念

at命令允许用户在指定的时间执行一个指定的任务或脚本,且该任务只能执行一次。使用at命令前,需要确保系统已经开启了atd服务。

二、使用步骤

  1. 查看系统时间
    在设置at任务之前,首先需要查看当前的系统时间,以确保设置的执行时间是正确的。可以使用date命令来查看系统时间。
  2. 设置at任务
    使用at命令后,跟上指定的时间(可以是HH:MM格式的时间,也可以加上yyyy-mm-dd日期),然后回车进入at任务的编辑环境。在这个环境中,可以输入要执行的命令或脚本。输入完毕后,按Ctrl+D组合键提交任务。
    示例:
    at 19:00
    # 进入at任务编辑环境
    echo "Hello, at task!" > /tmp/at_output.txt
    # 输入完毕后,按Ctrl+D提交任务
    
  3. 查看at任务列表
    使用atq命令可以查看当前系统中所有未执行的at任务列表及其序号。
  4. 删除at任务
    如果需要删除某个at任务,可以使用atrm命令加上任务序号来删除。
    示例:
    atrm 1
    # 假设任务序号为1
    

三、注意事项

  1. atd服务
    在使用at命令之前,需要确保系统的atd服务已经启动。如果服务未启动,可以通过系统服务管理工具(如systemctl、service等)来启动atd服务。
  2. 环境变量
    在at任务中执行的命令或脚本,可能会受到环境变量的影响。因此,在编写at任务时,需要注意环境变量的设置。如果脚本中使用了特定的环境变量,可能需要在脚本中显式地设置这些环境变量。
  3. 输出重定向
    由于at任务是在后台执行的,因此其输出可能不会直接显示在终端上。如果需要保存输出,可以使用输出重定向功能将输出保存到文件中。
  4. 权限问题
    默认情况下,普通用户可能无法直接使用at命令来设置任务。如果需要让普通用户使用at命令,可能需要调整系统的权限设置或使用sudo命令来提升权限。

四、应用场景

at-计划任务管理非常适合于需要一次性执行的任务场景,如系统维护、数据备份、定时关机等。通过at命令,用户可以方便地安排这些任务在指定的时间自动执行,从而节省时间和提高工作效率。

crontab命令-周期性计划任务管理

crontab的计划任务管理

crontab是Linux系统中用于设置周期性被执行的任务的工具。它允许用户按照自己的需求,设定在特定时间自动执行指定的命令或脚本。

一、crontab的配置格式

crontab的配置文件(通常为用户的crontab文件,而系统级别的crontab文件位于/etc/crontab)中的每一行都代表一个定时任务,格式如下:

* * * * * user-name command to be executed
| | | | |
| | | | +---- Day of week   (0 - 7) (Sunday=0 or 7)
| | | +------ Month of year (1 - 12)
| | +-------- Day of month  (1 - 31)
| +---------- Hour          (0 - 23)
+------------ Minute        (0 - 59)
  • Minute:分钟(0 - 59)
  • Hour:小时(0 - 23)
  • Day of month:一个月中的第几天(1 - 31)
  • Month of year:月份(1 - 12)或使用月份的英文缩写(如Jan, Feb等)
  • Day of week:一周中的第几天(0 - 7),其中0和7都代表星期日,或使用星期的英文缩写(如Sun, Mon等)
  • user-name:执行命令的用户名称(可选,仅当/etc/crontab文件中定义任务时使用)
  • command to be executed:要执行的命令或脚本的绝对路径
二、crontab实例

以下是一些crontab任务设置的实例:

  1. 每天凌晨1点执行database-backup脚本

    0 1 * * * /home/user/database-backup
    
  2. 每小时的第30分钟执行check-system命令

    30 * * * * /usr/bin/check-system
    
  3. 每周一、三、五的上午8点到10点之间,每隔半小时执行clean-logs脚本

    0,30 8-10 * * 1,3,5 /home/user/clean-logs
    
  4. 每月的1号和15号的凌晨12点执行monthly-report脚本

    0 0 1,15 * * /home/user/monthly-report
    
  5. 每天的晚上11点到早上7点之间,每隔一小时重启smb服务

    0 23-7/1 * * * /etc/init.d/smb restart
    

    注意:上面的命令可能需要根据你的系统(如使用systemd的系统)和服务管理器进行调整。例如,使用systemd的系统可能需要使用systemctl restart smb来重启服务。

三、crontab相关命令
  • 编辑crontab文件crontab -e

    • 这个命令会打开一个编辑器(通常是系统默认的文本编辑器),让用户可以添加、修改或删除定时任务。
  • 查看当前用户的crontab条目crontab -l

    • 这个命令会列出当前用户所有的crontab条目。
  • 删除当前用户的crontab文件crontab -r

    • 这个命令会删除当前用户的crontab文件,即删除所有定时任务。
  • 查看指定用户的crontab条目(需要root权限):crontab -u 用户名 -l

    • 这个命令允许root用户查看其他用户的crontab条目。
  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值