程序管理
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 所属的使用者 |
PR | Priority 的简写,程序的优先执行顺序,越小越早被执行 |
NI | Nice 的简写,与 Priority 有关,也是越小越早被执行 |
VIRT | 进程使用的虚拟内存总量,单位 KB |
RES | Resident Memory Size,进程使用的、未被换出的物理内存大小,单位 KB |
SHR | 共享内存大小,单位 KB |
%CPU | CPU 的使用率 |
%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 /
评论区