一、关于进程

  进程: 已经启动的可执行程序的运行实力

  进程的组成:一个进程包含内核中的一部分地址空间和一系列数据结构。其中地址空间是内核标记的一部分内存以供进程使用,而数据结构则用来纪录每个进程的具体信息。

最主要的进程信息包括:

  • 进程的地址空间图
  • 进程当前的状态( sleeping、stopped、runnable 等)
  • 进程的执行优先级
  • 进程调用的资源信息
  • 进程打开的文件和网络端口信息
  • 进程的信号掩码(指明哪种信号被屏蔽)
  • 进程的属主
PID :进程 ID

每个进程都会从内核获取一个唯一的 ID 值。绝大多数用来操作进程的命令和系统调用,都需要用 PID 指定操作的进程对象。

PPID :父进程 ID

在 Unix 和 Linux 系统中,一个已经存在的进程必须“克隆”它自身来创建一个新的进程。当新的进程克隆后,最初的进程便作为父进程存在。

UID & EUID:真实用户 ID 和有效用户 ID

一个进程的 UID 是其创建者的身份标志(也是对其父进程 UID 的复制)。通常只有进程的创建者和超级用户才有操作该进程的权限。
EUID 是一个额外的 UID,用来决定在任意一个特定时间点,一个进程有权限访问的文件和资源。对绝大多数进程而言,UID 和 EUID 是相同的(特殊情况即 setuid)

Niceness

一个进程的计划优先级决定了它能获取到的 CPU 时间。内核有一个动态的算法来计算优先级,同时也会关注一个 Niceness 值,来决定程序运行的优先顺序。

二、信号

  信号属于进程级别的中断请求。它们可以作为进程间通信的手段,或者由终端发送以杀死、中断、挂起某个进程。

  Linux的信号列表:

[root@web ~]# kill -l
) SIGHUP ) SIGINT ) SIGQUIT ) SIGILL ) SIGTRAP
) SIGABRT ) SIGBUS ) SIGFPE ) SIGKILL ) SIGUSR1
) SIGSEGV ) SIGUSR2 ) SIGPIPE ) SIGALRM ) SIGTERM
) SIGSTKFLT ) SIGCHLD ) SIGCONT ) SIGSTOP ) SIGTSTP
) SIGTTIN ) SIGTTOU ) SIGURG ) SIGXCPU ) SIGXFSZ
) SIGVTALRM ) SIGPROF ) SIGWINCH ) SIGIO ) SIGPWR
) SIGSYS ) SIGRTMIN ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX 

常用信号:

9)SIGKILL:用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。

15)SIGTERM:程序结束(terminate)信号。与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常(优雅地)退出。shell命令kill缺省产生这个信号。

19)SIGSTOP:停止(stopped)进程的执行。注意它和terminate以及interrupt的区别:该进程还未结束,只是暂停执行。本信号不能被阻塞、处理或忽略。

三、ps命令

  简介:ps 命令就是最根本相应情况下也是相当强大地进程查看命令.运用该命令可以确定有哪些进程正在运行和运行地状态、 进程 是否结束、进程有没有僵死、哪些进程占用了过多地资源等等.总之大部分信息均为可以通过执行该命令得到

  命令常用参数:ps【选项】

-e 显示所有进程,环境变量
-f 全格式
-h 不显示标题
-l 长格式
-w 宽输出
a
显示终端上地所有进程,包括其他用户地进程

  命令使用案例:

列出所有进程:

[root@web ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 0.0 0.7 ? Ss : : /usr/lib/syste
root 0.0 0.0 ? S : : [kthreadd]
root 0.0 0.0 ? S< : : [kworker/:0H]
root 0.0 0.0 ? S : : [kworker/u256:
root 0.0 0.0 ? S : : [ksoftirqd/]
[root@web ~]# ps ef
PID TTY STAT TIME COMMAND
pts/ Ss : -bash USER=root LOGNAME=root HOME=/root PATH=/usr/lo
pts/ S : \_ bash XDG_SESSION_ID= HOSTNAME=172.16.234.111 TE
pts/ R+ : \_ ps ef XDG_SESSION_ID= HOSTNAME=172.16.234.1

列出类似进程树的程序:

[root@web ~]# ps axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
? - S : [kthreadd]
? - S< : \_ [kworker/:0H]
? - S : \_ [kworker/u256:
? - S : \_ [ksoftirqd/]
? - S : \_ [migration/]

-l : 列出和当前用户有关的进程   -u 用户 : 查看某一用户的进程状态

进程的五种状态码表示:

  • D 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  • R 运行(正在运行或在运行队列中等待)
  • S 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  • T 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行
  • Z 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)

ps -aux 参数解释

  • %CPU:占用的CPU使用率
  • %MEM:占用的记忆体 / 内存使用率
  • VSZ:占用虚拟记忆体 / 内存大小
  • RSS:占用的记忆体 / 内存大小
  • TTY:终端的次要装置号码 / 线路
  • STAT:该进程的状态
  • START:进程开始时间
  • TIME:执行的时间
  • COMMAND:所执行的指令

注:在 STAT 栏目中:

  1. < 表示高优先级
  2. n 表示低优先级
  3. s 包含子进程
  4. + 位于后台的进程组

四、top命令

查看实时的进程状态,实现动态监控进程,top 命令可以实时显示系统当前活跃进程的总体信息及其占用的资源。

top - :: up  :,   user,  load average: 0.00, 0.01, 0.05
Tasks: total, running, sleeping, stopped, 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
KiB Mem : total, free, used, buff/cache
KiB Swap: total, free, used. avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root S 0.3 0.0 :01.19 xfsaild/dm+
root S 0.0 0.8 :02.00 systemd
root S 0.0 0.0 :00.00 kthreadd
root - S 0.0 0.0 :00.00 kworker/:+
root S 0.0 0.0 :00.57 kworker/u2+
root S 0.0 0.0 :00.74 ksoftirqd/
root rt S 0.0 0.0 :00.00 migration/

top 命令的 -d 选项可以指定信息刷新的时间间隔。同时还有一些常用的交互命令

  • K:杀死一个进程,后面接进程的PID和指定需要处理的信号;默认值为15,强制杀死进程为9
  • M:按驻留内存使用率大小排序
  • P:按CPU使用率百分比大小排序
  • q:退出top程序
  • s:修改两次信息刷新的时间间隔,默认单位为秒
  • W:将当前设置写入~/.toprc文件中

top命令一些信息字段含义:

1.系统运行时间和负载情况:
top - :: up  :,   users,  load average: 0.00, 0.01, 0.05
  1. 系统当前时间
  2. 系统已运行的时长
  3. 登陆用户数量
  4. 系统在5分钟、10分钟、15分钟的负载情况;

注意 load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

2.任务:
Tasks:   total,    running,   sleeping,    stopped,    zombie

Task-任务,分别显示任务进程的总数量以及正在运行、睡眠、停止、僵死的进程数

3.CPU状态:
%Cpu(s):  1.0 us,  1.0 sy,  0.0 ni, 98.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  • us:用户空间占用CPU的百分比
  • sy:系统空间占用CPU的百分比
  • ni:改变过优先级的进程占用CPU的百分比
  • id:空闲CPU的百分比
  • wa:IO等待占用CPU的百分比
  • hi:处理硬件中断的CPU时间(Hardware IRQ)
  • si:处理软件中断的CPU时间(Software Interrupts)
  • st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)

注:在这里CPU的使用比率和windows概念不同,如果你不理解用户空间和内核空间——>传送门:https://www.cnblogs.com/sparkdev/p/8410350.html

4.内存使用:
KiB Mem :    total,    free,     used,    buff/cache
KiB Swap: total, free, used. avail Mem
第一行是物理内存使用,第二行是虚拟内存使用(交换空间)
内存显示以KB为单位,物理内存显示如下:全部可用内存、空闲内存、已使用内存、缓冲内存。 交换部分显示的是:全部、空闲、已使用、总的可使用内存。
5.各进程任务状态监控:
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
root S 0.0 0.8 :01.71 systemd
root S 0.0 0.0 :00.00 kthreadd
root - S 0.0 0.0 :00.00 kworker+

PID:进程ID,进程的唯一标识符

USER:进程所有者的实际用户名。

PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。

NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级

VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR:SHR是进程使用的共享内存。共享内存大小,单位kb

S:这个是进程的状态。它有以下不同的值:

  • D - 不可中断的睡眠态。
  • R – 运行态
  • S – 睡眠态
  • T – 被跟踪或已停止
  • Z – 僵尸态

%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。

%MEM:进程使用的可用物理内存百分比。

TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。


参考:

https://www.cnblogs.com/zhoug2020/p/6336453.html

https://www.cnblogs.com/ftl1012/p/top.html


最新文章

  1. krpano
  2. BZOJ1251——序列终结者
  3. JSon_零基础_002_将List类型数组转换为JSon格式的对象字符串,返回给界面
  4. java.io.FileOutputStream类的5个构造方法
  5. http://www.cnblogs.com/vowei/archive/2012/08/24/2654287.html
  6. Codeforces Round #363
  7. 应用之星推出“图文app”制作工具,并附上教程
  8. 九度OJ1198 a+b 【高精度整数】
  9. mysql监控管理工具--innotop
  10. HDU 3501 Calculation 2
  11. Struts2获取演示示例教程
  12. 为HTTP分类作序
  13. Centos7下安装部署MXNET
  14. JVM菜鸟进阶高手之路一(一次与笨神,阿飞近距离接触修改JVM)
  15. Python内置函数(6)——round
  16. eclipse properties 插件
  17. awesomes前端资源库网站
  18. Binary Prefix Divisible By 5 LT1018
  19. break MISSING_BLOCK_LABEL_160; 看源代码出现的,源代码是反编译的
  20. B2旅游签证记

热门文章

  1. Java对象导论
  2. eruda手机端调试神器
  3. Apollo 分布式配置中心(补充)
  4. Pull Request 工作流——更高效的管理代码
  5. 2.Ansible Playbook剧本
  6. CSRF漏洞原理浅谈
  7. C lang: VLA(variable-length array)
  8. python科学计算和数据分析常用库
  9. 【一起刷LeetCode】在未排序的数组中找到第 k 个最大的元素
  10. swoole是多进程还是多线程