欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

关于Linux下进程的详解【进程查看与管理】

程序员文章站 2022-05-18 20:56:46
一、关于进程 进程: 已经启动的可执行程序的运行实力 进程的组成:一个进程包含内核中的一部分地址空间和一系列数据结构。其中地址空间是内核标记的一部分内存以供进程使用,而数据结构则用来纪录每个进程的具体信息。 最主要的进程信息包括: 进程的地址空间图 进程当前的状态( sleeping、stopped ......

一、关于进程

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

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

最主要的进程信息包括:

  • 进程的地址空间图
  • 进程当前的状态( 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
 1) sighup       2) sigint       3) sigquit      4) sigill       5) sigtrap
 6) sigabrt      7) sigbus       8) sigfpe       9) sigkill     10) sigusr1
11) sigsegv     12) sigusr2     13) sigpipe     14) sigalrm     15) sigterm
16) sigstkflt   17) sigchld     18) sigcont     19) sigstop     20) sigtstp
21) sigttin     22) sigttou     23) sigurg      24) sigxcpu     25) sigxfsz
26) sigvtalrm   27) sigprof     28) sigwinch    29) sigio       30) sigpwr
31) sigsys      34) sigrtmin    35) sigrtmin+1  36) sigrtmin+2  37) sigrtmin+3
38) sigrtmin+4  39) sigrtmin+5  40) sigrtmin+6  41) sigrtmin+7  42) sigrtmin+8
43) sigrtmin+9  44) sigrtmin+10 45) sigrtmin+11 46) sigrtmin+12 47) sigrtmin+13
48) sigrtmin+14 49) sigrtmin+15 50) sigrtmax-14 51) sigrtmax-13 52) sigrtmax-12
53) sigrtmax-11 54) sigrtmax-10 55) sigrtmax-9  56) sigrtmax-8  57) sigrtmax-7
58) sigrtmax-6  59) sigrtmax-5  60) sigrtmax-4  61) sigrtmax-3  62) sigrtmax-2
63) sigrtmax-1  64) 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          1  0.0  0.7 190900  3796 ?        ss   09:28   0:01 /usr/lib/syste
root          2  0.0  0.0      0     0 ?        s    09:28   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        s<   09:28   0:00 [kworker/0:0h]
root          5  0.0  0.0      0     0 ?        s    09:28   0:00 [kworker/u256:
root          6  0.0  0.0      0     0 ?        s    09:28   0:00 [ksoftirqd/0]
[root@web ~]# ps ef
   pid tty      stat   time command
   918 pts/0    ss     0:00 -bash user=root logname=root home=/root path=/usr/lo
   949 pts/0    s      0:00  \_ bash xdg_session_id=4 hostname=172.16.234.111 te
  1258 pts/0    r+     0:00      \_ ps ef xdg_session_id=4 hostname=172.16.234.1

列出类似进程树的程序:

[root@web ~]# ps axjf
  ppid    pid   pgid    sid tty       tpgid stat   uid   time command
     0      2      0      0 ?            -1 s        0   0:00 [kthreadd]
     2      4      0      0 ?            -1 s<       0   0:00  \_ [kworker/0:0h]
     2      5      0      0 ?            -1 s        0   0:00  \_ [kworker/u256:
     2      6      0      0 ?            -1 s        0   0:00  \_ [ksoftirqd/0]
     2      7      0      0 ?            -1 s        0   0:00  \_ [migration/0]

 

-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 - 16:21:00 up  6:52,  1 user,  load average: 0.00, 0.01, 0.05
tasks:  95 total,   1 running,  94 sleeping,   0 stopped,   0 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 :   479664 total,   268788 free,    98624 used,   112252 buff/cache
kib swap:  2097148 total,  2097148 free,        0 used.   362524 avail mem

   pid user      pr  ni    virt    res    shr s %cpu %mem     time+ command
   407 root      20   0       0      0      0 s  0.3  0.0   0:01.19 xfsaild/dm+
     1 root      20   0  190900   3796   2584 s  0.0  0.8   0:02.00 systemd
     2 root      20   0       0      0      0 s  0.0  0.0   0:00.00 kthreadd
     4 root       0 -20       0      0      0 s  0.0  0.0   0:00.00 kworker/0:+
     5 root      20   0       0      0      0 s  0.0  0.0   0:00.57 kworker/u2+
     6 root      20   0       0      0      0 s  0.0  0.0   0:00.74 ksoftirqd/0
     7 root      rt   0       0      0      0 s  0.0  0.0   0:00.00 migration/0

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

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

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

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

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

 

2.任务:
tasks:  97 total,   1 running,  96 sleeping,   0 stopped,   0 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概念不同,如果你不理解用户空间和内核空间——>传送门:

4.内存使用:
kib mem :   479664 total,   278252 free,    89548 used,   111864 buff/cache
kib swap:  2097148 total,  2097148 free,        0 used.   371568 avail mem
第一行是物理内存使用,第二行是虚拟内存使用(交换空间)
内存显示以kb为单位,物理内存显示如下:全部可用内存、空闲内存、已使用内存、缓冲内存。 交换部分显示的是:全部、空闲、已使用、总的可使用内存。
5.各进程任务状态监控:
   pid user      pr  ni    virt    res    shr s %cpu %mem     time+ command
     1 root      20   0   43400   3736   2568 s  0.0  0.8   0:01.71 systemd
     2 root      20   0       0      0      0 s  0.0  0.0   0:00.00 kthreadd
     4 root       0 -20       0      0      0 s  0.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和其他更多的信息。


 

参考: