Linux-进程管理

    • Linux 进程管理
      • 1. 进程的含义
      • 2. 进程状态
      • 3. 进程工作模式
      • 4. 守护进程
      • 5. 进程查看命令
        • 5.1 `ps` 命令
        • 5.2 `top` 命令
        • 5.3 `pstree` 命令
      • 6. 终止进程的 `kill` 命令
      • 7. 前后台运行
      • 8. 暂停进程
      • 9. 进程文件系统 `/proc`
      • 10. 定时任务管理
        • 10.1 `at` 命令
        • 10.2 `batch` 命令
        • 10.3 `cron` 与 `crontab` 命令
      • 11. 综合案例:设置用户限制并创建 `crontab` 文件
        • 步骤 1:设置用户限制
        • 步骤 2:创建 `crontab` 文件
        • 步骤 3:验证限制设置



Linux 进程管理

1. 进程的含义

在 Linux 系统中,进程是程序的运行实例,是系统资源分配和调度的基本单位。每个进程都有自己的独立地址空间、程序计数器、寄存器集合和堆栈。进程的状态和行为由操作系统进行管理和调度。

2. 进程状态

进程在其生命周期中会处于不同的状态,这些状态反映了进程当前的活动情况:

  • 运行态(Running):进程正在 CPU 上运行,或者已经准备好运行,等待 CPU 时间片。
  • 就绪态(Ready):进程已经准备好运行,但当前没有分配到 CPU 时间片,处于等待状态。
  • 等待态(Waiting):进程正在等待某些事件的发生,例如 I/O 操作完成。只有当等待的事件发生后,进程才会继续运行。
  • 僵尸态(Zombie):进程已经完成,但其父进程尚未读取其状态信息。僵尸进程不能被终止,只能等待父进程读取状态信息后自动消失。
  • 挂起态(Stopped):进程被挂起,通常是因为接收到信号(如 SIGSTOP)或资源不足。挂起的进程可以被恢复运行。

3. 进程工作模式

进程可以以两种模式运行:

  • 前台模式:进程在终端中运行,用户可以直接与之交互。如果前台进程终止,终端会发送 SIGHUP 信号给该进程。
  • 后台模式:进程在后台运行,用户无法直接与之交互。可以通过在命令后面加上 & 符号将进程放到后台运行。

4. 守护进程

守护进程(Daemon)是一种在后台运行的特殊进程,通常用于提供某种服务。守护进程通常在系统启动时启动,并在系统关闭时停止。常见的守护进程包括 sshd(SSH 服务)、httpd(Apache 服务)等。守护进程的特点是:

  • 在后台运行,不与终端交互。
  • 通常由 init 进程(PID 为 1)管理。
  • 可以通过 systemctlservice 命令管理守护进程。

5. 进程查看命令

5.1 ps 命令

ps 命令用于显示当前系统中运行的进程信息。它可以帮助用户了解系统中各个进程的状态、资源占用情况等。

  • 语法

    ps [选项]
    
  • 常用参数

    • -a:显示所有终端上的进程。
    • -u:显示指定用户的进程。
    • -x:显示没有控制终端的进程。
    • -e:显示所有进程。
    • -f:显示完整格式的进程信息。
    • -l:显示长格式的进程信息。
    • -o:自定义输出格式。
    • -p:指定进程 ID。
    • -t:指定终端。
  • 使用案例

    • 显示当前终端的所有进程

      ps -a
      

      这将列出当前终端中所有活跃的进程,包括它们的进程 ID(PID)、终端(TTY)、累计 CPU 时间等信息。
      在这里插入图片描述

    • 显示所有用户的进程

      ps -aux
      

在这里插入图片描述
在这里插入图片描述

  1. USER

    • 含义:运行该进程的用户名称。
    • 示例hadoop17表示该进程是由用户hadoop17启动的。
  2. PID

    • 含义:进程ID(Process ID),是系统为每个进程分配的唯一标识符。
    • 示例1234表示该进程的ID为1234。
  3. %CPU

  • 含义:该进程占用的CPU使用率(百分比)。
  • 示例1.2表示该进程占用了1.2%的CPU资源。
  1. %MEM
  • 含义:该进程占用的物理内存使用率(百分比)。
  • 示例0.5表示该进程占用了0.5%的系统物理内存。
  1. VSZ
  • 含义:虚拟内存大小(Virtual Memory Size,单位为KB)。
    • 虚拟内存包括进程实际使用的物理内存、已分配但尚未使用的内存,以及进程映射的文件和共享库所占用的内存。
  • 示例102400表示该进程的虚拟内存大小为102400 KB。
  1. RSS

    • 含义:常驻内存大小(Resident Set Size,单位为KB)。
      • 常驻内存是指进程实际占用的物理内存大小,不包括已交换出去的内存、映射但未使用的内存等。
    • 示例51200表示该进程实际占用的物理内存为51200 KB。
  2. TTY

  • 含义:终端设备(TTY)的名称,表示该进程是从哪个终端启动的。
    • 如果进程不是从终端启动的(例如后台服务),通常会显示?
  • 示例pts/0表示该进程是从伪终端pts/0启动的;?表示该进程没有关联的终端。
  1. STAT
  • 含义:进程的状态。
    • 常见的状态代码包括:
      • R:运行状态(Running)。
      • S:睡眠状态(Sleeping),进程正在等待某些事件(如磁盘I/O)。
      • D:不可中断的睡眠状态(Uninterruptible Sleep),通常是因为进程正在等待硬件设备。
      • Z:僵尸状态(Zombie),进程已经结束,但其父进程尚未读取其状态信息。
      • T:暂停状态(Stopped),进程被用户或系统暂停。
      • W:无驻留页(Paging),进程正在等待页面交换。
      • <:高优先级进程。
      • N:低优先级进程。
      • L:进程正在等待磁盘I/O。
  • 示例S表示该进程处于睡眠状态。
  1. START
  • 含义:进程启动的时间。
  • 示例Jul01表示该进程是在7月1日启动的。
  1. TIME
  • 含义:进程实际占用CPU的累计时间(单位为小时:分钟:秒)。
  • 示例00:01:30表示该进程累计占用了1分30秒的CPU时间。
  1. COMMAND
  • 含义:启动该进程的命令行。
  • 示例java -jar myapp.jar表示该进程是通过java -jar myapp.jar命令启动的。

示例解释
假设你看到以下输出:

hadoop17  1234  1.2  0.5 102400 51200 pts/0    S    Jul01   00:01:30 java -jar myapp.jar
  • 用户hadoop17启动了该进程。

  • 进程ID1234

  • CPU占用率1.2%

  • 内存占用率0.5%

  • 虚拟内存大小102400 KB

  • 常驻内存大小51200 KB

  • 终端:从pts/0终端启动。

  • 状态:处于睡眠状态(S)。

  • 启动时间:7月1日。

  • 累计CPU时间:1分30秒。

  • 启动命令java -jar myapp.jar

    • 显示指定用户的进程

      ps -u username
      

      这将列出指定用户的所有进程,方便用户查看自己的进程状态。
      在这里插入图片描述

    • 显示没有控制终端的进程

      ps -x
      

      这将列出所有没有控制终端的进程,通常用于查看后台运行的进程。
      在这里插入图片描述

    • 显示完整格式的进程信息

      ps -ef
      

      这将列出所有进程的详细信息,包括进程的启动时间、父进程 ID 等。
      在这里插入图片描述
      在这里插入图片描述

    • 自定义输出格式

      ps -eo pid,comm,%cpu,%mem
      

      这将自定义输出格式,仅显示进程 ID、命令名称、CPU 使用率和内存占用率。
      在这里插入图片描述

    • 显示特定进程 ID 的进程

      ps -p 1234
      

      这将显示指定进程 ID 的详细信息。
      在这里插入图片描述

5.2 top 命令

top 命令用于实时显示系统中占用资源最多的进程信息。它是一个动态的、交互式的工具,可以帮助用户实时监控系统的性能和资源使用情况。

  • 语法

    top [选项]
    
  • 常用参数

    • -d <秒数>:指定刷新间隔时间。
    • -p <PID>:仅显示指定进程 ID 的进程。
    • -u <用户名>:仅显示指定用户的进程。
    • -n <次数>:指定刷新次数。
  • 使用案例

    • 实时显示系统中占用资源最多的进程

      top
      

      这将实时显示系统中占用 CPU 和内存最多的进程,包括进程 ID、用户、CPU 使用率、内存占用等信息。
      在这里插入图片描述

    • 指定刷新间隔时间

      top -d 2
      

      这将设置 top 的刷新间隔为 2 秒。

    • 仅显示指定用户的进程

      top -u username
      

      这将仅显示指定用户的进程,方便用户查看自己的进程占用情况。
      在这里插入图片描述

    • 仅显示指定进程 ID 的进程

      top -p 1234
      

      这将仅显示指定进程 ID 的进程信息。
      在这里插入图片描述

系统整体状态

  • top - 10:15:27 up 7:27, 1 user, load average: 0.46, 0.18, 0.12
    • 10:15:27:当前系统时间。
    • up 7:27:系统已经运行了7小时27分钟。
    • 1 user:当前有1个用户登录。
    • load average: 0.46, 0.18, 0.12:系统的负载平均值,分别为1分钟、5分钟和15分钟的平均值。负载平均值表示在特定时间内,系统中“活跃”(即正在使用CPU或等待I/O操作完成)的进程的平均数量。

任务和CPU状态

  • Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie

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

    • 0.0 us:用户空间占用的CPU百分比。
    • 1.0 sy:内核空间占用的CPU百分比。
    • 0.0 ni:用户进程空间内改变过优先级的进程占用的CPU百分比。
    • 99.0 id:CPU空闲时间百分比。
    • 0.0 wa:等待I/O操作完成的时间百分比。
    • 0.0 hi:硬件中断占用的CPU时间百分比。
    • 0.0 si:软件中断占用的CPU时间百分比。
    • 0.0 st:虚拟机偷取的CPU时间百分比。

内存和交换空间状态

  • KiB Mem: 20148448 total, 414552 free, 7178552 used, 8824444 buff/cache

    • 20148448 total:总内存大小。
    • 414552 free:空闲内存大小。
    • 7178552 used:已使用的内存大小。
    • 8824444 buff/cache:用作缓冲和缓存的内存大小。
  • KiB Swap: 20971148 total, 20971148 free, 0 used. 1108588 avail Mem

    • 20971148 total:总交换空间大小。
    • 20971148 free:空闲交换空间大小。
    • 0 used:已使用的交换空间大小。
    • 1108588 avail Mem:可用内存大小,包括空闲内存和可以被回收的缓存。

进程信息

  • PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

    • PID:进程ID。
    • USER:进程所有者。
    • PR:优先级。
    • NI:nice值,影响优先级。
    • VIRT:进程使用的虚拟内存总量。
    • RES:进程使用的常驻内存大小。
    • SHR:进程使用的共享内存大小。
    • S:进程状态(S表示睡眠,R表示运行等)。
    • %CPU:进程占用的CPU百分比。
    • %MEM:进程占用的物理内存百分比。
    • TIME+:进程启动后占用的总CPU时间。
    • COMMAND:启动进程的命令名称。
  • 92240 hadoop17 20 0 13068 2208 2052 S 0.0 0.1 0:00.00 sftp-server

    • 92240:进程ID。
    • hadoop17:进程所有者。
    • 20:优先级。
    • 0:nice值。
    • 13068:虚拟内存总量。
    • 2208:常驻内存大小。
    • 2052:共享内存大小。
    • S:进程状态为睡眠。
    • 0.0:进程占用的CPU百分比。
    • 0.1:进程占用的物理内存百分比。
    • 0:00.00:进程启动后占用的总CPU时间。
    • sftp-server:启动进程的命令名称。
5.3 pstree 命令

pstree 命令以树状图的形式显示当前系统中的进程及其父子关系。它可以帮助用户直观地了解进程的层次结构,非常适合查看复杂的进程关系。

  • 语法

    pstree [选项]
    
  • 常用参数

    • -p:显示进程 ID。
    • -u:显示进程的所有者。
    • -a:显示每个进程的命令行参数。
    • -h:高亮显示当前进程及其父进程。
    • -s:显示指定进程的父进程。
    • -c:不合并相同的进程。
  • 使用案例

    • 显示所有进程的树状图

      pstree
      

      这将以树状图的形式显示系统中所有进程的层次结构。
      在这里插入图片描述

    • 显示所有进程的树状图并显示进程 ID

      pstree -p
      

      这将显示每个进程的 PID,方便用户识别具体的进程。
      在这里插入图片描述

    • 显示所有进程的树状图并显示进程的所有者

      pstree -u
      

      这将显示每个进程的所有者,帮助用户了解进程的归属。
      在这里插入图片描述

    • 显示所有进程的树状图并显示命令行参数

      pstree -a
      

      这将显示每个进程的完整命令行参数,方便用户了解进程的启动方式。
      在这里插入图片描述

    • 高亮显示当前进程及其父进程

      pstree -h
      

      这将高亮显示当前进程及其父进程,帮助用户快速定位当前进程的位置。

    • 显示指定进程的父进程

      pstree -s 1234
      

      这将显示指定进程的父进程,帮助用户了解进程的继承关系。
      在这里插入图片描述

6. 终止进程的 kill 命令

kill 命令用于向进程发送信号,通常用于终止进程。它可以帮助用户在需要时停止或暂停进程。

  • 语法

    kill [选项] <PID>
    
  • 常用参数

    • -9:强制终止进程(SIGKILL),进程无法捕获此信号,将立即终止。
    • -15:默认信号,请求进程自行终止(SIGTERM),进程可以捕获此信号并进行清理操作。
    • -1:挂起进程(SIGINT),类似于用户按下 Ctrl+C
    • -18:继续运行被挂起的进程(SIGCONT)。
  • 使用案例

    • 终止指定进程

      kill 1234
      

      这将向进程 ID 为 1234 的进程发送默认的 SIGTERM 信号,请求进程自行终止。

    • 强制终止指定进程

      kill -9 1234
      

      这将向进程 ID 为 1234 的进程发送 SIGKILL 信号,强制终止进程。

    • 挂起指定进程

      kill -1 1234
      

      这将向进程 ID 为 1234 的进程发送 SIGINT 信号,挂起进程。

    • 继续运行被挂起的进程

      kill -18 1234
      

      这将向进程 ID 为 1234 的进程发送 SIGCONT 信号,继续运行被挂起的进程。

7. 前后台运行

在 Linux 中,用户可以通过以下方式将进程放到前台或后台运行,或者暂停正在运行的进程。

  • 后台运行

    command &
    

    这将把命令放到后台运行,用户可以继续在终端中执行其他命令。

  • 将后台进程放到前台运行

    fg %1
    

    这将把后台运行的进程(例如进程号为 1 的进程)放到前台运行,用户可以与之交互。

8. 暂停进程

用户可以通过 Ctrl+Z 组合键暂停当前前台进程,然后使用 bg 命令将其放到后台运行。

  • 暂停前台进程

    Ctrl+Z
    

    这将暂停当前前台运行的进程。

  • 将暂停的进程放到后台运行

    bg %1
    

    这将把暂停的进程放到后台继续运行。

9. 进程文件系统 /proc

/proc 是一个虚拟文件系统,包含系统中所有进程的信息。每个进程都有一个以进程 ID 命名的目录,例如 /proc/1234,其中包含该进程的详细信息。

  • 常用文件

    • /proc/<PID>/status:显示进程的状态信息。
    • /proc/<PID>/cmdline:显示进程的启动命令。
    • /proc/<PID>/environ:显示进程的环境变量。
    • /proc/<PID>/fd:显示进程打开的文件描述符。
  • 使用案例

    • 查看进程状态信息
      cat /proc/1234/status
      
      这将显示进程 ID 为 1234 的进程状态信息,包括进程的优先级、内存占用等。
      在这里插入图片描述

Name

  • 含义:进程的名称。
  • 作用:标识进程运行的程序名称,例如 sshd 表示这是一个 SSH 服务守护进程。

Umask

  • 含义:文件掩码(umask),用于设置进程创建文件时的默认权限。
  • 作用:默认情况下,文件权限为 666,目录权限为 777umask 用于从这些默认权限中减去相应的权限。例如,0022 表示:
    • 文件权限:666 - 022 = 644(即 -rw-r--r--
    • 目录权限:777 - 022 = 755(即 drwxr-xr-x

State

  • 含义:进程的当前状态。
  • 作用
    • R:运行状态(Running),进程正在运行或在运行队列中等待运行。
    • S:睡眠状态(Sleeping),进程正在等待某些资源(如 I/O)或被挂起。
    • D:不可中断的睡眠状态(Disk Sleep),进程正在等待某些资源(如磁盘 I/O)且无法被中断。
    • Z:僵尸状态(Zombie),进程已经完成,但其父进程尚未读取其状态信息。
    • T:停止状态(Stopped),进程被挂起,通常是因为接收到信号(如 SIGSTOP)或资源不足。
    • W:唤醒状态(Waking),进程正在被唤醒。
    • P:挂起状态(Parked),进程被挂起,等待某些资源。
    • I:僵尸状态(Idle),进程处于空闲状态。

Tgid

  • 含义:线程组 ID(Thread Group ID),通常与进程 ID 相同。
  • 作用:用于标识线程组,多线程程序中所有线程的 tgid 相同。

Ngid

  • 含义:命名空间组 ID(Namespace Group ID)。
  • 作用:在使用命名空间的场景中,ngid 用于标识命名空间组。0 表示该进程没有使用命名空间。

Pid

  • 含义:进程 ID(Process ID)。
  • 作用:唯一标识系统中的一个进程。

PPid

  • 含义:父进程 ID(Parent Process ID)。
  • 作用:标识创建该进程的父进程。1 表示父进程是 init 进程(PID 为 1)。

TracerPid

  • 含义:跟踪进程 ID(Tracer Process ID)。
  • 作用:如果进程被调试器跟踪,这里会显示调试器的进程 ID。0 表示该进程没有被跟踪。

Uid

  • 含义:用户 ID(User ID),分别表示:
    • 实际用户 ID(Real UID)
    • 有效用户 ID(Effective UID)
    • 保存的用户 ID(Saved UID)
    • 文件系统用户 ID(Filesystem UID)
  • 作用0 表示该进程以 root 用户运行。

Gid

  • 含义:组 ID(Group ID),分别表示:
    • 实际组 ID(Real GID)
    • 有效组 ID(Effective GID)
    • 保存的组 ID(Saved GID)
    • 文件系统组 ID(Filesystem GID)
  • 作用0 表示该进程属于 root 组。
    FDSize
  • 含义:文件描述符表的大小。
  • 作用:表示该进程可以打开的最大文件描述符数量。

Groups

  • 含义:进程所属的用户组列表。
  • 作用:显示进程所属的所有用户组。这里为空,表示进程只属于 root 组。

NStgid

  • 含义:命名空间中的线程组 ID。
  • 作用:与 tgid 类似,但在命名空间中使用。

NSpid

  • 含义:命名空间中的进程 ID。
  • 作用:与 pid 类似,但在命名空间中使用。

NSpgid

  • 含义:命名空间中的进程组 ID。
  • 作用:与 pgid 类似,但在命名空间中使用。

NSsid

  • 含义:命名空间中的会话 ID。
  • 作用:与 sid 类似,但在命名空间中使用。

内存信息

VmPeak

  • 含义:进程占用的虚拟内存峰值。
  • 作用:表示进程在运行过程中达到的最大虚拟内存使用量。

VmSize

  • 含义:进程当前占用的虚拟内存大小。
  • 作用:表示进程当前使用的虚拟内存总量,包括代码段、数据段、堆、栈等。

VmLck

  • 含义:锁定的内存大小。
  • 作用:表示进程锁定的内存大小,锁定的内存不会被交换到磁盘。

VmPin

  • 含义:固定在内存中的页面大小。
  • 作用:表示进程固定在内存中的页面大小,这些页面不会被交换到磁盘。

VmHWM

  • 含义:进程占用的物理内存峰值。
  • 作用:表示进程在运行过程中达到的最大物理内存使用量。

VmRSS

  • 含义:进程占用的物理内存大小(Resident Set Size)。
  • 作用:表示进程当前实际占用的物理内存大小,包括代码段、数据段、堆、栈等。

RssAnon

  • 含义:匿名内存的大小。
  • 作用:表示进程占用的匿名内存大小,匿名内存是指没有映射到文件的内存,如堆和栈。

RssFile

  • 含义:文件映射的内存大小。
  • 作用:表示进程占用的文件映射内存大小,如共享库等。

RssShmem

  • 含义:共享内存的大小。
  • 作用:表示进程占用的共享内存大小。

VmData

  • 含义:数据段的大小。
  • 作用:表示进程的数据段大小,包括堆和栈。

VmStk

  • 含义:栈的大小。
  • 作用:表示进程的栈大小。

VmExe

  • 含义:可执行文件的大小。
  • 作用:表示进程的可执行文件大小。

VmLib

  • 含义:共享库的大小。
  • 作用:表示进程加载的共享库大小。

VmPTE

  • 含义:页表条目的大小。
  • 作用:表示进程的页表条目大小。

VmSwap

  • 含义:交换空间的大小。
  • 作用:表示进程占用的交换空间大小。

HugetlbPages

  • 含义:大页内存的大小。
  • 作用:表示进程占用的大页内存大小。

其他信息

CoreDumping

  • 含义:是否正在生成核心转储文件。
  • 作用0 表示进程没有正在生成核心转储文件。

Threads

  • 含义:进程中的线程数量。
  • 作用:表示该进程包含的线程数量。

SigQ

  • 含义:信号队列的使用情况。
  • 作用0/7606 表示当前信号队列中没有信号,最大信号队列大小为 7606。

SigPnd

  • 含义:挂起的信号。
  • 作用:表示进程当前挂起的信号掩码。

ShdPnd

  • 含义:共享挂起的信号。
  • 作用:表示进程共享挂起的信号掩码。

SigBlk

  • 含义:阻塞的信号。
  • 作用:表示进程当前阻塞的信号掩码。

SigIgn

  • 含义:忽略的信号。
  • 作用:表示进程当前忽略的信号掩码。0000000000001000 表示进程忽略了一些信号。

SigCgt

  • 含义:捕获的信号。
  • 作用:表示进程当前捕获的信号掩码。0000000180014005 表示进程捕获了一些信号。

CapInh

  • 含义:继承的能力(Capabilities)。
  • 作用:表示进程继承的能力掩码。0000000000000000 表示没有继承任何能力。

CapPrm

  • 含义:允许的能力(Capabilities)。
  • 作用:表示进程允许的能力掩码。0000003fffffffff 表示进程允许的能力。

CapEff

  • 含义:有效的能力(Capabilities)。
  • 作用:表示进程当前有效的能力掩码。0000003fffffffff 表示进程当前有效的能力。

CapBnd

  • 含义:边界的能力(Capabilities)。
  • 作用:表示进程的能力边界掩码。0000003fffffffff 表示进程的能力边界。

CapAmb

  • 含义:环境的能力(Capabilities)。
  • 作用:表示进程的环境能力掩码。0000000000000000 表示没有环境能力。

NoNewPrivs

  • 含义:是否禁止提升权限。
  • 作用0 表示进程可以提升权限,1 表示禁止提升权限。

Seccomp

  • 含义:安全计算模式(Seccomp)。
  • 作用0 表示进程没有启用 Seccomp,1 表示启用了 Seccomp。

Speculation_Store_Bypass

  • 含义:推测性存储旁路(Speculation Store Bypass)。
  • 作用:表示进程是否易受推测性存储旁路攻击。thread vulnerable 表示线程易受攻击。

Cpus_allowed

  • 含义:允许运行的 CPU 核心。
  • 作用:表示进程可以运行的 CPU 核心。ffffffff,ffffffff,ffffffff,ffffffff 表示进程可以运行在所有 CPU 核心上。

Cpus_allowed_list

  • 含义:允许运行的 CPU 核心列表。
  • 作用:表示进程可以运行的 CPU 核心列表。0-127 表示进程可以运行在 CPU 核心 0 到 127 上。
    好的,接下来我将详细解释 Mems_allowed_listvoluntary_ctxt_switchesnonvoluntary_ctxt_switches 这三个参数的含义和作用。

抱歉刚才的内容有些冗长了,现在我来详细解释一下 Mems_allowed 参数的含义和作用。

Mems_allowed

  • 含义:允许访问的内存节点(Memory Nodes)。

  • 作用:在 NUMA(Non-Uniform Memory Access)架构的系统中,内存被划分为多个节点(Node),每个节点对应一组物理内存。Mems_allowed 表示进程可以访问的内存节点。

    Mems_allowed 的值是一个位掩码(bitmask),每个位对应一个内存节点。如果某一位为 1,表示进程可以访问该内存节点;如果为 0,则表示不能访问。

Mems_allowed_list

  • 含义:允许访问的内存节点列表。
  • 作用:在 NUMA(Non-Uniform Memory Access)架构的系统中,内存被划分为多个节点(Node),每个节点对应一组物理内存。Mems_allowed_list 是一个更直观的表示,列出了进程可以访问的内存节点编号。

示例
在例子中:

Mems_allowed_list:      0

这表示进程只能访问内存节点 0。如果系统中有多个内存节点,例如 0 和 1,那么这里可能会显示 0-10,1

voluntary_ctxt_switches

  • 含义:自愿上下文切换的次数。
  • 作用:表示进程主动放弃 CPU 的次数。当进程主动调用 yield 或等待某些资源(如 I/O)时,会触发自愿上下文切换。

示例
在例子中:

voluntary_ctxt_switches:        44

这表示该进程已经主动放弃 CPU 44 次。

nonvoluntary_ctxt_switches

  • 含义:非自愿上下文切换的次数。
  • 作用:表示进程被操作系统强制剥夺 CPU 的次数。这通常发生在进程的时间片用完,或者有更高优先级的进程需要运行时。

示例
在例子中:

nonvoluntary_ctxt_switches:     17

这表示该进程被操作系统强制剥夺 CPU 17 次。


  • 查看进程启动命令

    cat /proc/1234/cmdline
    

    这将显示进程 ID 为 1234 的进程启动时的命令行参数。
    在这里插入图片描述

  • 查看进程环境变量

    cat /proc/1234/environ | tr '\0' '\n'
    

    这将显示进程 ID 为 1234 的进程的环境变量。
    在这里插入图片描述

  • 查看进程打开的文件描述符

    ls /proc/1234/fd
    

    这将列出进程 ID 为 1234 的进程打开的所有文件描述符。

10. 定时任务管理

10.1 at 命令

at 命令用于在指定时间运行命令或脚本。它可以帮助用户安排在特定时间执行的任务,例如定时备份或定时发送邮件。

  • 语法

    at [选项] 时间
    
  • 常用参数

    • -f <文件>:指定要执行的命令文件。
    • -m:在命令执行完成后发送邮件通知。
    • -r <作业号>:删除指定的作业。
    • -l:列出当前所有待执行的作业。
  • 用户限制

    • /etc/at.allow:如果该文件存在,只有在文件中列出的用户才能使用 atbatch 命令。
    • /etc/at.deny:如果 /etc/at.allow 文件不存在,系统会检查 /etc/at.deny 文件。文件中列出的用户将被禁止使用 atbatch 命令。
  • 管理限制文件

    • 允许特定用户使用 atbatch

      echo "username" | sudo tee -a /etc/at.allow
      

      这将允许指定用户使用 atbatch 命令。

    • 禁止特定用户使用 atbatch

      echo "username" | sudo tee -a /etc/at.deny
      

      这将禁止指定用户使用 atbatch 命令。

    • 查看当前的限制设置

      cat /etc/at.allow
      cat /etc/at.deny
      

      这将显示当前的用户限制设置。

  • 使用案例

    • 在指定时间运行命令

      echo "echo 'Hello, World!'" | at 14:30
      

      这将在当天的 14:30 执行 echo 'Hello, World!' 命令。
      在这里插入图片描述

    • 运行脚本文件

      at -f /path/to/script.sh 14:30
      

      这将在当天的 14:30 执行指定的脚本文件。

    • 列出所有待执行的作业

      at -l
      

      这将列出当前所有待执行的 at 作业。

    • 删除作业

      at -r <作业号>
      

      这将删除指定的 at 作业。

10.2 batch 命令

batch 命令用于在系统负载较低时运行命令或脚本。它可以帮助用户在系统资源较为充裕时执行任务,避免对系统性能造成过大影响。

  • 语法

    batch [选项]
    
  • 常用参数

    • -f <文件>:指定要执行的命令文件。
    • -m:在命令执行完成后发送邮件通知。
  • 用户限制
    batch 命令的用户限制与 at 命令相同,通过 /etc/at.allow/etc/at.deny 文件进行控制。

  • 使用案例

    • 在系统负载较低时运行命令

      echo "echo 'Hello, World!'" | batch
      

      这将在系统负载较低时执行 echo 'Hello, World!' 命令。

    • 运行脚本文件

      batch -f /path/to/script.sh
      

      这将在系统负载较低时执行指定的脚本文件。

10.3 croncrontab 命令

cron 是一个用于定期执行任务的守护进程,而 crontab 是用于管理 cron 任务的命令。它们可以帮助用户安排周期性任务,例如定时备份、定时清理日志等。

  • 语法

    crontab [选项] [文件]
    
  • 常用参数

    • -e:编辑当前用户的 crontab 文件。
    • -l:列出当前用户的 crontab 文件内容。
    • -r:删除当前用户的 crontab 文件。
    • -i:在删除 crontab 文件前进行确认。
  • 用户限制

    • /etc/cron.allow:如果该文件存在,只有在文件中列出的用户才能使用 crontab 命令。
    • /etc/cron.deny:如果 /etc/cron.allow 文件不存在,系统会检查 /etc/cron.deny 文件。文件中列出的用户将被禁止使用 crontab 命令。
  • 管理限制文件

    • 允许特定用户使用 crontab

      echo "username" | sudo tee -a /etc/cron.allow
      

      这将允许指定用户使用 crontab 命令。

    • 禁止特定用户使用 crontab

      echo "username" | sudo tee -a /etc/cron.deny
      

      这将禁止指定用户使用 crontab 命令。

    • 查看当前的限制设置

      cat /etc/cron.allow
      cat /etc/cron.deny
      

      这将显示当前的用户限制设置。

  • crontab 文件格式
    crontab 文件的每一行代表一个定时任务,格式如下:

    * * * * * command
    
    • 第一个 *:分钟(0-59)
    • 第二个 *:小时(0-23)
    • 第三个 *:日期(1-31)
    • 第四个 *:月份(1-12)
    • 第五个 *:星期几(0-7,其中 0 和 7 都表示星期日)
  • 使用案例

    • 编辑 crontab 文件

      crontab -e
      

      这将打开当前用户的 crontab 文件进行编辑。
      在这里插入图片描述

      在编辑器中添加以下内容:

      # 每天凌晨 2 点运行备份脚本
      0 2 * * * /path/to/backup.sh
      

      这将在每天凌晨 2 点执行指定的备份脚本。

      按下 Ctrl + O(字母 O,表示 Output),然后按 Enter 键保存文件。
      按下 Ctrl + X 退出 nano 编辑器。

    • 查看当前用户的 crontab 文件内容

      crontab -l
      

      这将列出当前用户的 crontab 文件内容。

    • 删除当前用户的 crontab 文件

      crontab -r
      

      这将删除当前用户的 crontab 文件。

11. 综合案例:设置用户限制并创建 crontab 文件

步骤 1:设置用户限制

假设您希望只有 admin 用户可以使用 atcrontab,其他用户则被禁止。

  • 允许 admin 用户使用 atcrontab

    echo "admin" | sudo tee /etc/at.allow
    echo "admin" | sudo tee /etc/cron.allow
    

    这将允许 admin 用户使用 atcrontab 命令。

  • 禁止其他用户使用 atcrontab

    sudo truncate -s 0 /etc/at.deny
    sudo truncate -s 0 /etc/cron.deny
    

    这将清空 /etc/at.deny/etc/cron.deny 文件,从而禁止其他用户使用这些命令。

步骤 2:创建 crontab 文件

admin 用户身份创建 crontab 文件:

  • 编辑 crontab 文件

    crontab -e
    

    这将打开当前用户的 crontab 文件进行编辑。

    在编辑器中添加以下内容:

    # 每天凌晨 2 点运行备份脚本
    0 2 * * * /path/to/backup.sh
    

    这将在每天凌晨 2 点执行指定的备份脚本。
    在这里插入图片描述

  • 查看 crontab 文件内容

    crontab -l
    

    这将列出当前用户的 crontab 文件内容。
    在这里插入图片描述

步骤 3:验证限制设置
  • 验证 at 限制

    sudo atq
    

    这将列出当前所有待执行的 at 作业。
    在这里插入图片描述

  • 验证 crontab 限制

    sudo crontab -l
    

    这将列出当前用户的 crontab 文件内容。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88137.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88137.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88137.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV图像增强秘籍:高通滤波与特效艺术

> 在数字图像处理领域,边缘是图像最富信息的区域。掌握高通滤波技术,你就能让图像中的隐藏细节"跃然纸上",甚至创造惊艳的艺术效果。 ## 一、图像增强与高通滤波基础 ### 1.1 图像增强的核心目标 图像增强不是简单的美化,而是通过技术手段**突出重要特征*…

347. 前K个高频元素

题目&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例&#xff1a; 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 解题思路&#xff1a; 要返回出现频率前k高的元素&#xff0c;那么我们首…

C++面试冲刺笔记1:虚函数的基本工作原理

C面试冲刺笔记1&#xff1a;虚函数的基本工作原理 前言 ​ 笔者最近开始投简历&#xff0c;出于应对之后快速的面试流程需求&#xff0c;这里准备的是将常见的C八股文进行总结&#xff0c;从而方便自己进行学习&#xff0c;检查和评估。 什么是虚函数 ​ 虚函数&#xff0c;本质…

Spring Boot 事务失效问题详解:原因、场景与解决方案

在 Spring Boot 开发中&#xff0c;事务管理是保证数据一致性和完整性的核心机制。然而&#xff0c;许多开发者在使用 Transactional 注解时&#xff0c;可能会遇到事务失效的问题&#xff0c;导致数据异常或业务逻辑错误。本文将深入分析 Spring Boot 中事务失效的常见原因&am…

Python-文件操作-StringIO和BytesIO-路径操作-shutil模块-csv,ini序列化和反序列化-argparse使用-学习笔记

序 欠4年前的一份学习笔记&#xff0c;献给今后的自己。 文件操作 冯诺依曼体系架构CPU由运算器和控制器组成 运算器&#xff0c;完成各种算数运算、逻辑运算、数据传输等数据加工处理 。 控制器&#xff0c;控制程序的执行 存储器&#xff0c;用于记忆程序和数据&#xff0c;例…

LLM的表征做减法的是什么,自然语言是一个矩阵,怎么进行减法的

LLM的表征做减法的是什么,自然语言是一个矩阵,怎么进行减法的 有个假设:就是最后一个词语融合了前面词语的信息 减法操作主要用于提取模型内部表征中的"诚实性"概念向量。具体来说,这是通过对比诚实和不诚实场景下的模型隐藏状态实现的。 import torch from t…

Java创建型模式---单例模式

单例模式基础概念单例模式是一种创建型设计模式&#xff0c;其核心思想是确保一个类仅有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。在 Java 中实现单例模式主要有以下关键点&#xff1a;私有构造函数 - 防止外部通过new关键字创建实例静态实例变量 - 类内部持有…

详解Kafka重平衡机制详解

Kafka 的重平衡机制&#xff08;Rebalance&#xff09;是确保消费者组内成员动态变化&#xff08;如新成员加入、现有成员退出或崩溃、订阅主题分区数变化&#xff09;时&#xff0c;分区所有权能合理、公平地重新分配的核心机制。其目标是保证所有分区都有消费者处理&#xff…

代码详细注释:文件IO在用户管理系统中的应用实践:C语言实现用户名查重与密码确认与支持日志记录的终端用户认证解决方案的注册登录系统

代码/* 作业增强版注册登录系统 - 带日志和安全性增强功能 */ #include <stdio.h> // 标准输入输出函数(printf, scanf等) #include <stdlib.h> // 标准库函数(exit, malloc等) #include <string.h> // 字符串处理函数(strcmp, strcspn等) #inc…

Go与JS无缝协作:Goja引擎实战之错误处理最佳实践

引言&#xff1a;当Go邂逅JavaScript 在现代软件开发中&#xff0c;跨语言协作已成为提升效率的关键。想象一下&#xff1a;用Go的高性能处理核心逻辑&#xff0c;同时用JavaScript的灵活性实现动态规则——这不再是梦想。Goja&#xff0c;这个纯Go语言实现的JavaScript引擎&am…

继承与多态:面向对象编程的两大支柱

引言&#xff1a;为什么必须掌握继承与多态&#xff1f; 在Java开发中&#xff0c;继承与多态是构建可扩展、易维护系统的基石&#xff1a; 继承&#xff1a;实现代码复用&#xff0c;建立清晰的类层次结构多态&#xff1a;提升代码灵活性&#xff0c;实现"编写一次&#…

2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--上篇

前言 我们在学习Flutter开发的过程中&#xff0c;永远都跳不过去的一个问题就是如何在MAC下开发并打包Flutter工程项目&#xff0c;但MAC开发首先要解决的问题就是我们一般技术人员的电脑都是WINDOWS操作系统&#xff0c;专门配置一台MAC的话成本又是不得不考虑的因素&#xf…

250708-Svelte项目从Debian迁移到无法联网的RHEL全流程指南

&#x1f4cc; 背景 在 Debian 上使用以下命令创建了一个 Svelte 项目&#xff1a; npm install -g sv npx sv create my-svelte-demo cd my-svelte-demo npm install npm run dev现在需要将该项目迁移到一台 无法联网的 RHEL 9.4 服务器 上运行&#xff0c;出现如下报错&…

力扣 hot100 Day39

118. 杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> res(numRows);for (int i 0; i < numRows; i) {res[i].resi…

HuggingFists: 无代码处理复杂PDF

有过使用LLM搭建RAG或其它类知识系统的朋友一定会对文档数据的复杂多样性有着深刻的理解。各行各业的磁盘中都沉睡了数年到数十年的各类文档信息&#xff0c;包括&#xff1a;Doc、Docx、PPT、PDF、XLS、PNG、JPEG等各类格式。利用LLM激活这些数据价值的首要工作就是能够正确的…

Vue 3 框架实现理念、架构与设计哲学深度解析

第一部分&#xff1a;Vue 3 的起源&#xff1a;架构演进与设计哲学 Vue 3 的诞生并非一次简单的版本迭代&#xff0c;而是一场深刻的架构革命。它的出现是前端技术演进、应用规模扩张以及对更高性能和可维护性追求的必然结果。要全面理解 Vue 3 的各项实现理念&#xff0c;必须…

SQL Server使用存储过程导出数据到Excel实现方式

在SQL Server数据库管理中,存储过程作为预编译的T-SQL语句集合,能显著提升数据操作效率与安全性。将数据导出到Excel的需求广泛存在于报表生成、数据迁移等场景。本文详细解析四种通过存储过程实现数据导出的技术方案,涵盖代码实现、适用场景及优化策略,为不同业务需求提供…

OpenGL 2. 着色器

#include <glad/glad.h> #include <GLFW/glfw3.h> #include <iostream> #include <stdexcept>// 函数声明 void framebuffer_size_callback(GLFWwindow* window, int width, int height); void processInput(GLFWwindow* window); void checkShaderCom…

【c++】容器扩容导致的类实例资源被错误释放

BUG记录 表现为新实例被存入前&#xff0c;容器内部的旧实例的析构被意外调用 因为 std::vector 在容量不足时&#xff0c;会自动扩容&#xff0c;把旧元素「搬」到新内存&#xff0c;然后析构旧内存上的那些对象。然后由于LKMotorController 类里没有正确处理移动语义&#xf…

TypeScript 集成

下面&#xff0c;我们来系统的梳理关于 Vue TypeScript 深度集成 的基本知识点&#xff1a;一、TypeScript 与 Vue 集成概述 1.1 为什么需要 TypeScript 类型安全&#xff1a;编译时类型检查&#xff0c;减少运行时错误代码智能&#xff1a;强大的IDE智能提示和自动补全可维护…