侧边栏壁纸
博主头像
爱探索

行动起来,活在当下

  • 累计撰写 42 篇文章
  • 累计创建 11 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

linux-程序管理

jelly
2024-07-05 / 0 评论 / 0 点赞 / 34 阅读 / 0 字

程序管理

1. 查看程序信息

1.1. 程序信息

1.1.1. 程序状态

状态说明
R (TASK_RUNNING)可执行状态。只有在该状态的进程才可能在CPU上运行。这意味着进程正在运行或在运行队列中等待运行。
S (TASK_INTERRUPTIBLE)可中断的睡眠状态。进程处于睡眠状态,但可以被某些信号(如中断)唤醒。
D (TASK_UNINTERRUPTIBLE)不可中断的睡眠状态。通常用于进程在等待I/O操作(如磁盘读写)完成时所处的状态,此时进程不能被任何信号唤醒,必须等待I/O操作完成后才能继续执行。
T (TASK_STOPPED or TASK_TRACED)暂停状态或跟踪状态。当进程收到一个SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU信号时,会进入暂停状态;而当进程被调试器(如gdb)等跟踪时,会进入跟踪状态。
Z (TASK_DEAD – EXIT_ZOMBIE)退出状态,进程成为僵尸进程。这意味着进程已经终止执行,但其父进程还没有获取其终止状态。僵尸进程本身不占用除进程表外的任何内存空间,但如果父进程不回收(通过调用wait或waitpid函数),那么它将一直存在,导致系统资源的浪费。
X (TASK_DEAD – EXIT_DEAD)退出状态,进程即将被销毁。这个状态表示进程已经被完全终止,并且其占用的所有资源都已经被回收。在实际应用中,这个状态通常很短暂,因为一旦进程达到这个状态,系统就会立即将其从进程表中移除。

1.1.2. PID,PPID

PID(进程标识符)PPID(父进程标识符)
定义PID是操作系统为每个运行进程自动分配的唯一标识符,用于区分和管理不同的进程。它是一个非零整数,且一旦分配给某个进程,就会一直标识该进程,直到进程结束并释放。PPID指的是父进程的PID,即创建当前进程的进程的标识符。在Linux等操作系统中,每个进程都由另一个进程创建,被创建的进程称为子进程,而创建它的进程则称为父进程。
作用作用:PID的主要作用是便于操作系统对进程进行管理和控制。通过PID,操作系统可以准确地识别、监控和调度各个进程,确保系统的稳定运行。PPID的主要作用是建立进程之间的父子关系,便于操作系统对进程树进行管理和维护。通过PPID,操作系统可以追踪进程的来源和依赖关系,进而实现进程的层次化管理。
特点每个进程都有一个唯一的PID,且PID在进程生命周期内保持不变。当进程结束后,其PID会被释放,以供后续创建的进程使用。每个子进程都有一个对应的PPID,指向其父进程。这种父子关系在进程创建时自动建立,并随着进程的结束而自动解除。

1.2. PS

ps :将某个时间点的程序运行情况撷取下来

常用指令:

  • ps: 会话中属于当前用户的进程列表。
  • ps -ef:显示系统中所有进程的列表,包括其他用户的进程。
    • e 选项表示显示所有进程,
    • f 选项表示使用全格式显示进程信息。全格式包括更多的列,如父进程ID(PPID)、进程状态、CPU使用率(%CPU)、内存使用率(%MEM)等。
  • ps -aux:显示详细的进程信息,包括CPU和内存使用情况等。
    • a 选项表示显示所有终端机下执行的进程(包括其他用户的进程)
    • u 选项表示使用用户为主的格式来显示程序状态,
    • x 选项表示显示所有进程,不区分终端主机。这个命令将显示所有进程的详细信息,包括进程拥有者、进程ID、CPU和内存使用率等。
  • ps -l:较长、较详细的将该 PID 的的信息列出
  • ps -p [PID]:显示指定进程ID的进程信息。
  • ps --sort=-%mem:按内存使用率对进程进行排序

ps命令的输出列解释:

  • F:代表这个程序旗标 (process flags),说明这个程序的总结权限。常用号码:
    • 4: 表示此程序的权限为 root ;
    • 1: 则表示此子程序仅进行复制(fork)而没有实际执行(exec)
  • S:进程的状态,如R(运行)、S(睡眠)、T(暂停)、Z(僵尸)等。
  • WCHAN 表示目前程序是否运行中,同样的, 若为 - 表示正在运行中
  • UID:用户ID,即进程的拥有者。
  • PID:进程ID。
  • PPID:该进程的父级进程ID。
  • C:CPU用于计算机执行优先级的因子,数值越大,执行优先级会降低(在某些系统中可能表示CPU的占用率)。
  • STIME:进程的启动时间。
  • TTY:终端设备,发起该进程的设备识别符号。如果显示‘?’表示该进程并不是由终端发起。
  • TIME:进程的执行时间或占用的CPU时间。
  • CMD:该进程的名称或对应的路径。
  • %CPU:进程占用的CPU百分比(在ps -aux等命令的输出中显示)。
  • %MEM:进程占用的内存百分比(在ps -aux等命令的输出中显示)。
  • SZ: 进程使用的内存大小,通常以页面数为单位
  • RSS:进程占用的实际物理内存大小(在ps -aux等命令的输出中显示,单位通常是KB)。
  • PRI: 进程的优先级。
  • NI: nice 值,一个用户可设置的进程优先级调整。正值使进程更“nice”,即更愿意让出 CPU,而负值则使进程更加“贪婪”。
  • ADDR: 进程的内存地址。
  • USER: 运行进程的用户的用户名。

1.2.1 示例一:仅观察自己的 bash 相关程序

将目前属于您自己这次登陆的 PID 与相关信息列示出来(只与自己的 bash 有关)

ps -l


jelly@jelly-linux:~/桌面$ ps -l
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000 1450911 1447315  0  80   0 -  3627 do_wai pts/3    00:00:00 bash
0 T  1000 1920098 1450911  0  80   0 -  4250 do_sig pts/3    00:00:00 find
4 R  1000 1922867 1450911  0  80   0 -  3628 -      pts/3    00:00:00 ps


# 上述输出可过可以知道find 指令的F是0,它的PID是1920098,PPID是1450911也就是说它是被bash程序所创建出来的,它的S是T说明当前处于暂停状态


1.3. top

动态查看程序变化

top [-d 数字] | top [-bnp]

  • -d :后面可以接秒数,就是整个程序画面更新的秒数。默认是 5 秒;
  • -b :以批次的方式执行 top ,还有更多的参数可以使用喔!通常会搭配数据流重导向来将批次的结果输出成为文件。
  • -n :与 -b 搭配,意义是,需要进行几次 top 的输出结果。
    -p :指定某些个 PID 来进行观察监测而已。

在 top 执行过程当中可以使用的按键指令:

  • ? :显示在 top 当中可以输入的按键指令;
  • P :以 CPU 的使用资源排序显示;
  • M :以 Memory 的使用资源排序显示;
  • N :以 PID 来排序喔!
  • T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
  • k :给予某个 PID 一个讯号 (signal)
  • r :给予某个 PID 重新制订一个 nice 值。
  • q :离开 top 软件的按键。

top 列说明:

指令说明
PID(进程号)每个 process 的 ID 啦
USER该 process 所属的使用者
PRPriority 的简写,程序的优先执行顺序,越小越早被执行
NINice 的简写,与 Priority 有关,也是越小越早被执行
VIRT进程使用的虚拟内存总量,单位 KB
RESResident Memory Size,进程使用的、未被换出的物理内存大小,单位 KB
SHR共享内存大小,单位 KB
%CPUCPU 的使用率
%MEM内存的使用率
TIME+CPU 使用时间的累加
COMMAND指令

1.4. pstree

pstree [选项]

  • -A :各程序树之间的连接以 ASCII 字符来连接;
  • -U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误;
  • -p :并同时列出每个 process 的 PID;
  • -u :并同时列出每个 process 的所属帐号名称

示例:


        ├─gdm3─┬─gdm-session-wor─┬─gdm-x-session(jelly)─┬─Xorg───4*[{Xorg}]
        │      │                 │                      ├─gnome-session-b─┬─fc+
        │      │                 │                      │                 ├─ss+
        │      │                 │                      │                 └─2*+
        │      │                 │                      └─2*[{gdm-x-session}]
        │      │                 └─2*[{gdm-session-wor}]
        │      └─2*[{gdm3}]

# 上图只是截取一部分,可以看出程序的依赖关系

3. 程序的管理

程序之间是可以互相控制的!举例来说,你可以关闭、重新启动服务器软件,服务器软件本身是个程序,你既然可以让她关闭或启动,当然就是可以控制该程序啦!那么程序是如何互 相管理的呢?其实是通过给予该程序一个讯号 (signal) 去告知该程序你想要让她作什么! 因此这个讯号就很重要啦

关于讯号量详见:IPC通信信号量

关信号量发送详见工作管理

使用示例:


kill -signal PID

关闭pid为13435的程序
kill -9 13435


killall -signal 指令名称
jelly@jelly-linux:~/桌面$ jobs
[1]   已停止               find /
[2]-  已停止               top
[3]+  已停止               find /

jelly@jelly-linux:~/桌面$ killall -9 find

[1]   已杀死               find /
[3]+  已杀死               find /


0

评论区