进程管理


目录:

进程管理

目录

|-进程管理 
|-什么是进程?
|-进程的分类?
|-进程的特点?
|-进程的状态?
进程常用命令
  |- w查看当前系统信息
  |- ps进程查看命令
  |- kill终止进程
  |- 一个存放内存中的特殊目录/proc
  |- 进程的优先级
  |- 进程的挂起与恢复
  |- 通过top命令查看进程
计划任务
  |- 计划任务的重要性
  |- 一次性计划at和batch
  |- 周期性计划crontab

什么是进程?

========程序与进程====

程序静态概念,本身作为一种软件资源长期保存;

程序: 二进制文件,静态 /bin/date,/usr/sbin/sshd 

而进程是程序的执行过程,它是动态概念有一定的生命期,是动态产生和消亡的

进程是已启动的可执行程序的运行实例,进程有以下组成部分:

  • 已分配内存的地址空间;
  • 安全属性,包括所有权凭据和特权;
  • 程序代码的一个或多个执行线程;
  • 进程状态

下图所示的是进程的生命周期:

image-20220623141956143

程序和进程无一一对应关系。一个程序可以有多个时程公用,另一方面,一个进程在活动中有可顺序的执行若干个程序

进程的分类:

守护进程:daemon(守护进程;后台程序)在系统引导过程中启动的进程,跟终端无关的进程;【多针对服务而言】

前台进程:跟终端相关,通过终端启动的进程【用户调用使用的进程】

Notice:也可以把在前台启动的进程送往后台,以守护模式运行;【可以使用命令实现】&

父子进程的关系

1、子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程

2、在Linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈以及父进程的进程环境。

3、父进程终止子进程自然终止。

前台进程和后台进程:

前台进程:

在shell提示处理打入命令后,创建一个子进程,运行命令,shell等待命令退出,然后返回到对用户给出提示符。这条命令与shell异步运行,即在前台运行,用户在它完成之前不能执行别一个命令。

image-20220623142240065

image-20220623142255688

其实就是,在执行这个命令时,无法进行其他操作,这个查找就属于前台进程

后台进程

在shell提示处打入命令,若后面跟一个&,shell创建子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与shell同步运行,即在后台运行。"后台进程必须是非交互式的"

image-20220623142330416

再来看这个命令就变成了后台进程,同样的条件进行查找;不影响我们前台其他的操作。

进程的特点?

1、进程拥有生存周期 –> TTL【timeout life】
2、进程必须调用内核的库函数
3、进程拥有依赖关系
进程的创建【依照init的系统进程,进而创建了子进程】
    init【只能由内核生成】
        进程存在依赖关系,所有的子进程都是由init衍生而来

Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?

运行状态:在 run_queue 队列里的状态 (runing)
就绪状态:在 run_queue 队列里的状态 (ready)
睡眠状态:sleeping
    可唤醒:uninterruptable
    可中断:interuptable
停止状态:stopped
    暂停与内存中,但不会被调用,除非手动启动
僵尸状态:zombie 状态(僵尸):一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。
--------------------------------------------------------------------
用自己的话表达: 父进程退出了,子进程没有退出,那么这些子进程就没有父进程来管理了,就变成僵尸进程。
D 不可中断Uninterruptible(usuallyIO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪(挂起)
Z 僵尸进程(这个进程必须杀死)
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
N 表示进程运行在低优先级上
< 表示进程运行在高优先级上
L 表示进程有页面锁定在内存中
s 表示进程是控制进程;就相当于是父进程
l 表示进程是多线程的
+ 表示当前进程运行在前台

image-20220623142649360

image-20220623142655694

pidof+进程名:查看这个程序的pid

pidof命令用于查找指定名称的进程的进程号id号。

Grammar

pidof (Option) (参数)

Option

-s:仅返回一个进程号;

-c:仅显示具有相同"root"目录的进程;

-x:显示由脚本开启的进程;

-o:指定不显示的进程ID。

参数

进程名称:指定要查找的进程名称。

Living Example

# pidof nginx
13312 5371

# pidof crond
1509

# pidof init
1

image-20220623142743854

pgrep+进程名:查看这个程序的pid

​ pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。

​ 通常pgerp与pkill连用->杀死所有进程

Grammar

pgrep (Option) (参数)

Option

-u:指定进程的有效用户ID。

-l:显示进程名称;

-v 反向匹配。匹配所有的进程除了符合匹配条件的。

-x 仅认为进程的参数字符串或者执行文件名称正确匹配规定模式是匹配的进程,模式被认为是准确的当所有在进程参数字符串或者可执行文件名称的字符匹配模式。

-o:仅显示找到的最小(起始)进程号;

-n:仅显示找到的最大(结束)进程号;

-P:指定父进程号;

-g:指定进程组;

-t:指定开启进程的终端;

参数

进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。

Living Example

[root@test6 ~]# pgrep vim
2052

ps -->用于报告当前系统的进程状态

ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

Grammar

ps (Option)

Option

a:显示现行终端机下的所有程序,包括其他用户的程序。

u:以用户为主的格式来显示程序状况。

x:显示所有程序,不以终端机来区分。

-e:此Option的效果和指定\"A\"Option相同。

-f:显示UID,PPIP,C与STIME栏位。(使用完整格式显示进程信息)

-l或l:采用详细的格式来显示程序状况。(长格式显示)

+-----------------------------------------------------------------------+ | > 常用Option组合:ps aux | | > | | > ps -ef | +-----------------------------------------------------------------------+

-C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。

--no-headers:此选项的效果和指定\"h\"选项相同,只在列表格式方面稍有差异。ps -C nginx h | ps -C nginx --no-headers

-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。

-u<用户识别码>:此Option的效果和指定\"-U\"Option相同。

X:采用旧式的Linux i386登陆格式显示程序状况。

-c:显示CLS和PRI栏位。

c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。

-d:显示所有程序,但不包括阶段作业领导者的程序。

e:列出程序时,显示每个程序所使用的环境变量。

f:用ASCII字符显示树状结构,表达程序间的相互关系。

-g<群组名称>:此Option的效果和指定\"-G\"Option相同,当亦能使用阶段作业领导者的名称来指定。

g:显示现行终端机下的所有程序,包括群组领导者的程序。

-G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。

h:不显示标题列。

-H:显示树状结构,表示程序间的相互关系。

-j或j:采用工作控制的格式显示程序状况。

L:列出栏位的相关信息。

-m或m:显示所有的执行绪。

n:以数字来表示USER和WCHAN栏位。

-N:显示所有的程序,除了执行ps指令终端机下的程序之外。

-p<程序识别码>:指定程序识别码,并列出该程序的状况。

p<程序识别码>:此Option的效果和指定\"-p\"Option相同,只在列表格式方面稍有差异。

r:只列出现行终端机正在执行中的程序。

-s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。

s:采用程序信号的格式显示程序状况。

S:列出程序时,包括已中断的子程序资料。

-t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。

t<终端机编号>:此Option的效果和指定\"-t\"Option相同,只在列表格式方面稍有差异。

-T:显示现行终端机下的所有程序。

-U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。

U<用户名称>:列出属于该用户的程序的状况。

v:采用虚拟内存的格式显示程序状况。

-V或V:显示版本信息。

-w或w:采用宽阔的格式来显示程序状况。 

-y:配合Option\"-l\"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位。

-<程序识别码>:此Option的效果和指定\"p\"Option相同。

--cols<每列字符数>:设置每列的最大字符数。

--columns<每列字符数>:此Option的效果和指定\"--cols\"Option相同。

--cumulative:此Option的效果和指定\"S\"Option相同。

--deselect:此Option的效果和指定\"-N\"Option相同。

--forest:此Option的效果和指定\"f\"Option相同。

--headers:重复显示标题列。

--help:在线帮助。

--info:显示排错信息。

--lines<显示列数>:设置显示画面的列数。

--group<群组名称>:此Option的效果和指定\"-G\"Option相同。

--Group<群组识别码>:此Option的效果和指定\"-G\"Option相同。

--pid<程序识别码>:此Option的效果和指定\"-p\"Option相同。

--rows<显示列数>:此Option的效果和指定\"--lines\"Option相同。

--sid<阶段作业>:此Option的效果和指定\"-s\"Option相同。

--tty<终端机编号>:此Option的效果和指定\"-t\"Option相同。

--user<用户名称>:此Option的效果和指定\"-U\"Option相同。

--User<用户识别码>:此Option的效果和指定\"-U\"Option相同。

--version:此Option的效果和指定\"-V\"Option相同。

--widty<每列字符数>:此Option的效果和指定\"-cols\"Option相同。

由于ps命令能够支持的系统类型相当的多,所以选项多的离谱!

Living Example

ps -l /ps aux这两个命令是查看后台运行的程序 (是字母l,不是数字1)

image-20220623143038377

[root@test-6 ~]# ps -l
F S  UID  PID   PPID C  PRI NI ADDR SZ   WCHAN  TTY    TIME     CMD
4 S   0   3336  3332 0  80  0   -  27121 do_wai pts/1  00:00:00 bash
4 R   0   3825  3336 11 80  0   -  27035 -      pts/1  00:00:00 ps

UID:用户ID
PID:进程号
PPID:父进程号
C:进程生命周期中的CPU利用率
NI:进程优先级
ADDR:
SZ:
WCHAN:当前进程是否正在运行
TTY:进程启动的终端
TIME:进程自从启动以后启用CPU的总时间
CMD:进程的命令名

这里的第二列就表示进程状态:

  • D 不可中断 uninterruptible sleep (usually IO)

  • R 运行 runnable (on run queue)

  • S 中断 sleeping

  • T 停止 traced or stopped

  • Z 僵死 a defunct ("zombie") process


ps aux 这个可以查看全部的进程

[pppp@test-6 ~]$ ps aux
USER  PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

image-20220623143126677

USER 启动这些进程的用户
PID 进程的ID
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
VSZ 进程占用的虚拟内存大小(单位KB)
RSS 进程占用的物理内存大小(单位KB)
TTY 串行终端
STAT 该程序目前的状态
START 该 process 被触发启动的时间;
TIME 该 process 实际使用 CPU 运作的时间。
COMMAND 该程序的实际指令

注: 最后一列[xxxx] 使用方括号括起来的进程是内核态的进程。没有括起来的是用户态进程。


Living Example: D  不可中断状态

[root@redhat7-min ~]# tar -zcvf usr-tar.gz /usr/

#然后在另一个终端不断查看状态,由S+,R+变为D+

[root@redhat7-min ~]# ps -aux | grep tar

image-20220623143302104


[root@test-6 ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 Dec27 ?        00:00:01 /sbin/init
root          2      0  0 Dec27 ?        00:00:00 [kthreadd]
root          3      2  0 Dec27 ?        00:00:00 [migration/0]
root          4      2  0 Dec27 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 Dec27 ?        00:00:00 [stopper/0]

包含的信息如下:

UID: 启动这些进程的用户

PID: 进程的ID

PPID: 父进程的进程号

C: 进程生命周期中的CPU利用率

STIME: 进程启动时的系统时间

TTY: 表明进程在哪个终端设备上运行。如果显示?表示与终端无关,这种进程一般是内核态进程。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程

TIME: 运行进程一共累计占用的CPU时间

CMD: 启动的程序名称


例:测试CPU使用时间。

dd if=/dev/zero of=/a.txt count=10 bs=100M
[root@localhost ~]# ps -axu | grep dd

注:

ps aux 是用BSD的格式来显示进程。

ps -ef 是用标准的格式显示进程


查看进程的某一项:

ps -ex -o com /或者 ps -ex -o com,%cpu,pid

ps aux | grep ming 杀不死的进程

image-20220623143557089

lsof -->用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)

lsof 命令是 Linux 系统的扩展工具,它的含义是 list opened filedesciptor (列出已经打开的文件描述符),在 Linux 系统中,所有的与资源句柄相关的东西都可以统一抽象成文件描述符(filedescriptor,简称 fd)。一个文件句柄是一个 fd,一个 socket 对象也可以称之为 fd 等等

image-20220623143656679

lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。

在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

Grammar

lsof (Option)

Option

-i<条件>:列出符合条件的进程。(4、6、协议(udp、tcp、空)、:端口、@ip )

-p<进程号>:列出指定进程号所打开的文件;

-n<目录>:列出使用NFS的文件;

-a:列出打开文件存在的进程;

-c<进程名>:列出指定进程所打开的文件;

-g:列出GID号进程详情;

-d<文件号>:列出占用该文件号的进程;

+d<目录>:列出目录下被打开的文件;

+D<目录>:递归列出目录下被打开的文件;

-u:列出UID号进程详情;

-h:显示帮助信息;

-v:显示版本信息。

Living Example

lsof
command     PID USER   FD      type             DEVICE     SIZE       NODE NAME
init          1 root  cwd       DIR                8,2     4096          2 /
init          1 root  rtd       DIR                8,2     4096          2 /
init          1 root  txt       REG                8,2    43496    6121706 /sbin/init
init          1 root  mem       REG                8,2   143600      ………………………………

lsof输出各列信息的意义如下:

  • COMMAND:进程的名称

  • PID:进程标识符

  • PPID:父进程标识符(需要指定-R参数)

  • USER:进程所有者

  • PGID:进程所属组

  • FD:文件描述符,应用程序通过文件描述符识别该文件。

文件描述符列表:

  1. cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改

  2. txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序

  3. lnn:library references (AIX);

  4. er:FD information error (see NAME column);

  5. jld:jail directory (FreeBSD);

  6. ltx:shared library text (code and data);

  7. mxx :hex memory-mapped type number xx.

  8. m86:DOS Merge mapped file;

  9. mem:memory-mapped file;

  10. mmap:memory-mapped device;

  11. pd:parent directory;

  12. rtd:root directory;

  13. tr:kernel trace file (OpenBSD);

  14. v86  VP/ix mapped file;

  15. 0:表示标准输出

  16. 1:表示标准输入

  17. 2:表示标准错误

一般在标准输出、标准错误、标准输入后还跟着文件状态模式:

  1. u:表示该文件被打开并处于读取/写入模式。

  2. r:表示该文件被打开并处于只读模式。

  3. w:表示该文件被打开并处于。

  4. 空格:表示该文件的状态模式为unknow,且没有锁定。

  5. -:表示该文件的状态模式为unknow,且被锁定。

同时在文件状态模式后面,还跟着相关的锁:

  1. N:for a Solaris NFS lock of unknown type;

  2. r:for read lock on part of the file;

  3. R:for a read lock on the entire file;

  4. w:for a write lock on part of the file;(文件的部分写锁)

  5. W:for a write lock on the entire file;(整个文件的写锁)

  6. u:for a read and write lock of any length;

  7. U:for a lock of unknown type;

  8. x:for an SCO OpenServer Xenix lock on part      of the file;

  9. X:for an SCO OpenServer Xenix lock on the      entire file;

  10. space:if there is no lock.

文件类型:

  1. DIR:表示目录。
  2. CHR:表示字符类型。
  3. BLK:块设备类型。
  4. UNIX: UNIX 域套接字。
  5. FIFO:先进先出 (FIFO) 队列。
  6. IPv4:网际协议 (IP) 套接字。
  7. DEVICE:指定磁盘的名称
  8. SIZE:文件的大小
  9. NODE:索引节点(文件在磁盘上的标识)
  10. NAME:打开文件的确切名称
# 查看端口信息:
[root@test-6 ~]# lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1828 root    3u  IPv4  14569      0t0  TCP *:ssh (LISTEN)
sshd    1828 root    4u  IPv6  14578      0t0  TCP *:ssh (LISTEN)
sshd    2154 root    3r  IPv4  16837      0t0  TCP 192.168.211.141:ssh->192.168.211.2:50009 (ESTABLISHED)
sshd    2212 root    3r  IPv4  17199      0t0  TCP 192.168.211.141:ssh->192.168.211.2:50078 (ESTABLISHED)
sshd    2507 root    3r  IPv4  18133      0t0  TCP 192.168.211.141:ssh->192.168.211.2:50402 (ESTABLISHED)


# eg:查看某文件被哪个进程所占用
lsof 文件名

a,列出所有正在使用文件
    # lsof
b,找出谁在使用某个文件(谁在使用nginx文件)
    # lsof /usr/local/nginx/sbin/nginx
c,递归查找某个目录中所有打开的文件
    # lsof +D /usr/local
d,列出某个用户打开的所有文件
    # lsof -u root  |more
e,查找某个程序打开的所有文件
    # lsof -c nginx
g,列出所有由某个PID对应的进程打开的文件
    # lsof -p 31048
j,找到使用某个端口的进程
    # lsof -i :80

pstree-->以树状图的方式展现进程之间的派生关系

pstree命令以树状图的方式展现进程之间的派生关系,显示效果比较直观。

Grammar

pstree (Option)

Option

-p:显示进程PID;

-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;

-c:不使用精简标示法;

-u:显示用户名称;

-U:使用UTF-8列绘图字符;

-G:使用VT100终端机的列绘图字符;

-h:列出树状图时,特别标明现在执行的程序;

-H<程序识别码>:此参数的效果和指定\"-h\"参数类似,但特别标明指定的程序;

-l:采用长列格式显示树状图;

-n:用程序识别码排序。预设是以程序名称来排序;

-V:显示版本信息。

Living Example

    显示当前所有进程的进程号和进程id
pstree -p
    显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。
pstree  -a

# pstree -u
systemd─┬─NetworkManager─┬─dhclient
                        └─2*[{NetworkManager}]
        ├─VGAuthService
        ├─agetty
        ├─atd
        └─vmtoolsd───{vmtoolsd}

pstree:(display a tree of processes)以树状图显示进程,只显示进程的名字,且相同进程合并显示。

格式:pstree    pstree  -p
以树状图显示进程,还显示进程PID。
# pstree -p

kill-->杀死执行中的程序或工作(常用的2种)

kill命令用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。

Grammar

kill (Option) (参数)

Option

-l <信息编号>:若不加<信息编号>Option,则-l参数会列出全部的信息名称;

-s <信息名称或编号>:指定要送出的信息;

-a:当处理当前进程时,不限制命令名和进程号的对应关系;

-p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;

-u:指定用户。

参数

进程或作业识别号:指定要删除的进程或作业。

Living Example

怎么查看系统支持的所有信号? kill --l

怎么查看系统支持的所有信号?      kill –l
[root@test-6 ~]# kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
……………………………………………………
63) SIGRTMAX-1  64) SIGRTMAX    

为什么要杀死进程?

*该进程占用了过多的CPU时间

*该进程锁住了一个终端,使其他前台进程无法运行

*运行时间过长,但没有预期的效果

*产生了过多到屏幕或磁盘文件的输出

*无法正常退出

只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略,下面是常用的信号:

SIGHUP    0     探测服务是否启动
SIGHUP    1    重新加载配置   (或者kill -USR1)(kill -1 [进程号] -->重启进程)
SIGINT     2    中断(同 Ctrl + C)
SIGQUIT   3    退出(同 Ctrl + \)
SIGTERM  15    终止(正常结束),缺省信号。默认kill就是15
SIGKILL    9    强制终止
SIGCONT  18    继续(与STOP相反, fg/bg命令)
SIGSTOP  19    停止(同 Ctrl + Z)
SIGTSTP  20   暂停 crtl+z

死循环:以这个死循环为例,来杀死这个进程

cat /dev/zero  >  /dev/null

killall -9 cat (结束cat所有进程)

或者:kill -9 pid (pidof 进程:查询进程pid)

image-20220623144133990

image-20220623144137961

image-20220623144142158

如果想杀死后台的第一个程序必须按照这样输入命令:

kill -9 %1(%表示后台的程序,1表示后台的第一个程序)

关闭图形程序:

关闭图形程序:xkill

当你在终端下输入这个命令时,你的鼠标会变成一个小叉子,你只去点你想要关闭的窗口就可以关闭了

关闭当前会话:

kill -9 $$

其他:

查找服务进程号:pgrep [服务名称]

pkill->可以按照进程名杀死进程

也就是说:kill对应的是PID,pkill对应的是command

通常pgerp与pkill连用->杀死所有进程

补充说明

pkill命令 可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。

语法

pkill (选项) (参数)

选项

-o:仅向找到的最小(起始)进程号发送信号;

-n:仅向找到的最大(结束)进程号发送信号;

-P:指定父进程号发送信号;

-g:指定进程组;

-t:指定开启进程的终端。

参数

进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。

实例

pgrep -l gai    #找出进程名,可以模糊查找的
2979 gaim

pkill gaim      #杀死gaim进程

杀死所有进程

方法一:
sudo killall -9 netease-cloud-music
这种方法,必须要写全称。
sudo netease-cloud-music 
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'05-23, 14:29:48 [Error  ] [                          0] Media changed05-23, 14:29:48 [Error  ] [                          0] Player opening
已杀死

方法二:
sudo kill -9 `pgrep netease`
这种方法,只需要知道大概的名称即可。
sudo netease-cloud-music 
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'05-23, 14:31:53 [Error  ] [                          0] Media changed05-23, 14:31:53 [Error  ] [                          0] Player opening
已杀死

方法三:
sudo pkill -9 netease-cloud
这个是方法二的延伸版本
sudo netease-cloud-music 
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'05-23, 14:33:32 [Error  ] [                          0] Media changed05-23, 14:33:32 [Error  ] [                          0] Player opening
已杀死

方法四:
# ps -aux | grep netease | awk '{print $2}'
11270
11271
11273
11309
11416
Copy
sudo kill -s 9 `ps -aux | grep netease | awk '{print $2}'`
这个应该是最原始的思路

进程的挂起与恢复(ctrl+z;fg/bg)

进程的中止(挂起)和终止:

例子:命令打开firefox,怎么终止程序,或者空出前台等操作

ctrl+c 终止程序

ctrl+z可以空出前台,不会终止程序,但是程序不能使用

ctrl+z过后Firefox就无法正常运行了

image-20220623144443574

查询后台有哪些程序在运行:jobs

进程的恢复:

bg [前面的序号]:恢复到前台继续运行;激活后台程序

image-20220623144527469

fg -->把后台任务调到前台执行(前台的命令行不能用)

说明:如果有多个进程 fg %1 (后台的第一个进程)

fg %2(后台的第二个进程)

image-20220623144552274

nohup->脱机管理

意思就是关闭了客户端过后程序还是继续运行:nohup ping www.baidu.com &

image-20220623144602840

image-20220623144614596

image-20220623144618509

image-20220623144622461

过滤:查看程序是否运行:ps aux | grep ping

image-20220623144632259

screen-->脱机管理

简介

Screen中有会话的概念,,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。

安装screen软件包

# rpm -ivh /mnt/Packages/screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm

或者

# yum install screen -y

screen使用方法

直接在命令行键入screen命令回车,如下图:

[root@test ~]# screen

image-20220623144711357 Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样

使用 screen 很方便,有以下几个常用选项:

  • screen -dmS session_name来建立一个处于断开模式下的会话(并指定其会话名)

  • screen -list来列出所有会话。

  • screen -r session_name来重新连接指定会话。

  • 用快捷键CTRL+a+d来暂时断开当前会话。

附:常用screen参数

screen -S test  ->      新建一个叫test的会话

screen -ls    ->      列出当前所有的会话

screen -r test  ->      回到test会话

使用screen后台实时执行命令备份命令

[root@CentOS6 usr]# screen      #进入

[root@CentOS6 usr]# vim a.txt   #执行命令, 或执行你自己需要运行的备份命令
此时想离开一段时间,但还想让这个命令继续运行

[root@CentOS6 usr]#      #在screen当前窗口键入快捷键Ctrl+a+d
半个小时之后回来了,找到该screen会话:
[root@CentOS6 ~]# screen -ls            #查看已经建立的会话ID
There is a screen on:
    11532.pts-3.CentOS6 (Detached)
1 Socket in /var/run/screen/S-root.

重新连接会话:
[root@CentOS6 ~]# screen -r 11532 
[root@CentOS6 ~]# exit    #不想使用screen 会话了,执行:exit退出。
 

screen 示例

[root@pvcent107 ~]# screen -dmS Urumchi
[root@pvcent107 ~]# screen -list
There is a screen on:
        12842.Urumchi   (Detached)
1 Socket in /tmp/screens/S-root.

[root@pvcent107 ~]# screen -r Urumchi
    当我们用“-r”连接到 screen 会话后,我们就可以在这个伪终端里面为所欲为,再也不用担心 HUP 信号会对我们的进程造成影响,也不用给每个命令前都加上“nohup”或者“setsid”了。这是为什么呢?让我来看一下下面两个例子吧。

1. 未使用 screen 时新进程的进程树

[root@pvcent107 ~]# ping www.google.com &
[1] 9499
[root@pvcent107 ~]# pstree -H 9499
init─┬─Xvnc
     ├─acpid
     ├─atd
     ├─2*[sendmail] 
     ├─sshd─┬─sshd───bash───pstree
            └─sshd───bash───ping

我们可以看出,未使用 screen 时我们所处的 bash  sshd 的子进程,当 ssh 断开连接时,HUP 信号自然会影响到它下面的所有子进程(包括我们新建立的 ping 进程)。

2. 使用了 screen 后新进程的进程树

[root@pvcent107 ~]# screen -r Urumchi
[root@pvcent107 ~]# ping www.ibm.com &
[1] 9488
[root@pvcent107 ~]# pstree -H 9488
init─┬─Xvnc
     ├─acpid
     ├─atd
     ├─screen───bash───ping
     ├─2*[sendmail]
而使用了 screen 后就不同了,此时 bash  screen 的子进程,而 screen  init(PID为1)的子进程。那么当 ssh 断开连接时,HUP 信号自然不会影响到 screen 下面的子进程了

tmux:终端复用工具、替代screen、nohup

tmux官网下载地址:http://tmux.github.io/ 

yum安装:yum install tmux -y

https://www.cnblogs.com/kevingrace/p/6496899.html (软件说明)

https://www.cnblogs.com/liuguanglin/p/9290345.html (软件说明)

jobs -->显示Linux中的任务列表及任务状态,包括后台运行的任务

jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。

在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到jobsbg、和 fg三个命令以及两个快捷键来完成。

Grammar

jobs (Option) (参数)

Option

-l:显示进程号;

-p:仅任务对应的显示进程号;

-n:显示任务状态的变化;

-r:仅输出运行状态(running)的任务;

-s:仅输出停止状态(stoped)的任务。

参数

任务标识号:指定要显示的任务识别号。

Living Example:

使用jobs命令显示当前系统的任务列表,输入如下命令:

jobs -l               #显示当前系统的任务列表

怎么使一个命令在后台运行?:(命令 &)

例如: firefox & 这样就会实现

一般都是使用 & 在命令结尾来让程序自动运行。(命令后可以不追加空格)

总结:

Linux后台进程与前台进程的区别

前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随着消失

后台进程:也叫守护进程(Daemon),是运行在后台的一种特殊进程,不受终端控制,它不需要与终端交互;Linux的大多数服务器就是用守护进程实现的。比如,Web服务器httpd等。

进程的前台与后台运行,跟系统任务相关的几个命令

&

用在一个命令的最后,可以把这个命令放到后台执行.

ctrl + z

将一个正在前台执行的命令放到后台,并且暂停.

jobs

查看当前有多少在后台运行的进程.它是一个作业控制命令

fg(foreground process)

将后台中的命令调至前台继续运行,如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) 

bg(background process)

将一个在后台暂停的命令,变成继续执行;如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

image-20220623145312012

一个存放内存中的特殊目录/proc

这个目录比较特殊,它并不在我们磁盘上,而在我们的内存当中;当前系统运行的所有进程都是动态的存放在这个目录中的

[root@test-6 ~]# ls /proc/
1     1607  1985  2202  3336  3496  3538  3768  5490       diskstats    loadavg       softirqs
10    1642  1987  2206  3361  3498  3543  3769  551        dma          locks         stat
11    17    1989  23    3371  35    3585  38    6          driver       mdstat        swaps
1102  1716  1991  24    3379  3500  3586  380   7          execdomains  meminfo       sys
1103  1717  1993  25    3380  3501  36    382   706        fb           misc          sysrq-trigger
116   1729  2     26    34    3502  37    39    8          filesystems  modules       sysvipc
1195  1730  20    260   3440  3504  3719  4     84         fs           mounts        timer_list
12    1776  2001  261   3449  3505  3722  4056  85         interrupts   mpt           timer_stats
13    1777  2016  262   3452  3507  3725  448   9          iomem        mtd           tty
14    18    2019  265   3455  3510  3732  449   acpi       ioports      mtrr          uptime
1464  1805  2033  266   3461  3512  3733  46    asound     irq          net           version
1499  1849  21    27    3463  3517  3737  460   buddyinfo  kallsyms     pagetypeinfo  vmallocinfo
15    1881  2103  28    3469  3520  3739  47    bus        kcore        partitions    vmstat
1550  19    2109  29    3470  3521  3740  49    cgroups    keys         sched_debug   zoneinfo
1570  1908  2150  3     3481  3524  3741  4926  cmdline    key-users    schedstat
1584  1923  2161  30    3483  3527  3744  5     cpuinfo    kmsg         scsi
1591  1939  2167  33    3494  3532  3747  50    crypto     kpagecount   self
16    1979  22    3332  3495  3535  3767  51    devices    kpageflags   slabinfo

查看当前CPU的信息:

[root@test-6 ~]# cat /proc/cpuinfo 
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 58
model name  : Intel(R) Core(TM) i3-3220 CPU @ 3.30GHz
stepping    : 9
microcode   : 18
cpu MHz     : 3293.679
cache size  : 3072 KB
physical id : 0
siblings    : 1
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc up arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx f16c hypervisor lahf_lm arat epb pln pts dtherm pti retpoline fsgsbase smep
bogomips    : 6587.35
clflush size    : 64
cache_alignment : 64
address sizes   : 42 bits physical, 48 bits virtual
power management:

查看内存信息

[root@test-6 ~]# cat /proc/meminfo 
MemTotal:        1002992 kB
MemFree:          490164 kB
Buffers:           11140 kB
Cached:           170544 kB
SwapCached:         1924 kB
Active:           113792 kB
Inactive:         233488 kB
Active(anon):      13552 kB
Inactive(anon):   156692 kB
Active(file):     100240 kB
Inactive(file):    76796 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1048572 kB
SwapFree:        1000508 kB
Dirty:                32 kB
Writeback:             0 kB
AnonPages:        163908 kB
Mapped:            27740 kB
Shmem:              4644 kB
Slab:              89576 kB
SReclaimable:      21236 kB
SUnreclaim:        68340 kB
KernelStack:        4016 kB
PageTables:        29264 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1550068 kB
Committed_AS:     781252 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      179060 kB
VmallocChunk:   34359539980 kB
HardwareCorrupted:     0 kB
AnonHugePages:     59392 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       14336 kB
DirectMap2M:     1034240 kB

查看当前分区的信息

[root@test-6 ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0   10485760 sda
   8        1     512000 sda1
   8        2    9972736 sda2
 253        0    8921088 dm-0
 253        1    1048576 dm-1

进程的执行拥有优先级一说

我们学过操作系统原理的同学都知道,我们系统在执行程序时有会先后顺序的,但为什么我们的电脑可以边听音乐,边聊QQ,边上网,甚至还可以同时挂几个游戏。因为我们CPU运行超快。他可以把每个程序的进程排好队,这个执行一下,那个执行一下。所以,我们会觉得各种程序是并行运行的。

当然,进程也会分个快慢缓急的,所以要对进程分个优先级。同学们在食堂排队打饭,总理来了,这优先级多高啊。同学们纷纷让开,先给总理打。

0-100:实时优先级【一般针对系统内核自身定义,无需认为操作】

100-139:静态优先级【可以人为操作】

* 优先级取值范围为(-20,19)

linux给我们提供的优先级的范围为-20到19,我们启动一个进程时,默认的优先级为0,-20的优先级为最大,或者说最高。当然,我们在设置的时候可以写-30,但系统默认为-20。

进程优先级越小越优先

**nice命令 **

指定程序的运行优先级\ 格式:nice -n command (-n:指定进程的优先级(整数))

例如:nice --5 command

renice 命令

改变一个正在运行的进程的优先级 格式:renice n pid 例如:renice -5 777

# 例子
[root@bogon cron]# ps -le
[root@bogon cron]# renice -20  [PID]

交互式修改进程优先级:

进程优先级是有NI决定的:优先级的数字越大,优先级别就越小,就越后面执行。如果让程序优先执行,就把NI设置成-20.反之设置19。(NI的范围-20到19)总结:优先执行进程就把NI设置成-20,反之改成19

如果要修改NI,进入top,按"r"输入进程的pid,然后就输入要改的值。或者进入终端:输入renice -n 系数 pid

uptime查看CPU负载工具

[root@localhost ~]# uptime
13:22:30 up 20days,  2 users,  load average: 0.06, 0.60, 0.48

弹出消息含意如下:

image-20220623163458225

任务队列的平均长度是什么?

大厅排除买票:

image-20220623163525874

这时队列是4:

cpu队列数为3时,如图:

image-20220623163537692

image-20220623163543538

如下图: 1人只能买1张票,排第四的人可能会急。 所以我们认为超过3就升级CPU

image-20220623163548453

实时查看系统运行情况

https://mp.weixin.qq.com/s/STkiyZaCBi9sbJz5iyICLw

top-->看内存实时的进程变化

top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。

Grammar

top (Option)

Option

-d:屏幕刷新间隔时间;

-c:显示整个命令而不仅仅显示命令名;

按"z"可以改变内容的颜色

-b:以批处理模式操作;

-n<次数>:循环显示的次数。

-I:忽略失效过程;

-s:保密模式;

-S:累积模式;

-i<时间>:设置间隔时间;

-u<用户名>:指定用户名;

-p<进程号>:指定进程;

top交互命令

在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。

h or ?:显示帮助画面,给出一些简短的命令总结说明;

k:终止一个进程;

u/U:查看指定用户的进程;

r:重新设定进程优先级

s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统

P:根据CPU使用百分比大小进行排序;

M:按内存大小进行排序;

T:根据时间/累计时间进行排序;

q:退出程序;

-p:进程ip,查看某个进程状态

数字键1:显示每个内核的CPU使用率

w:将当前设置写入~/.toprc文件中。

i:忽略闲置和僵死进程,这是一个开关式命令;

r:重新安排一个进程的优先级别;

S:切换到累计模式;

将不断刷新,默认值是5s;

f或者F:从当前显示中添加或者删除项目;

o或者O:改变显示项目的顺序;

l:切换显示平均负载和启动时间信息;

m:切换显示内存信息;

t:切换显示进程和CPU状态信息;

c:切换显示命令名称和完整命令行;

Living Example

第一行内容和uptime弹出的信息一样

进程和CPU的信息( 第二、三行)

image-20220623163647369

当有多个CPU时,这些内容可能会超过两行。内容如下:

top 按"z"可以改变内容的颜色。默认的是3s跳一次;

image-20220623163711555

top - 09:44:56 up 16 days, 21:23,  1 user,  load average: 9.59, 4.75, 1.92
Tasks: 145 total,   2 running, 143 sleeping,   0 stopped,   0 zombie
Cpu(s): 99.8%us,  0.1%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4147888k total,  2493092k used,  1654796k free,   158188k buffers
Swap:  5144568k total,       56k used,  5144512k free,  2013180k cached

解释:

  • top - 09:44:56[当前系统时间],

  • 5 min[系统已经运行了5 min],

  • 1 user[个用户当前登录],

  • load average: 9.59, 4.75, 1.92[系统负载,即任务队列的平均长度]

  • Tasks: 112 total[总进程数],

  • 1 running[正在运行的进程数],

  • 11 sleeping[睡眠的进程数],

  • 0 stopped[停止的进程数],

  • 0 zombie[冻结进程数],

  • Cpu(s): 0%us[用户空间占用CPU百分比],

  • 0%sy[内核空间占用CPU百分比],

  • 0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比],

  • 100%id[空闲CPU百分比], 0.0%wa[等待输入输出的CPU时间百分比],

  • 0.0%hi[],

  • 0.0%st[],

  • Mem: 4147888k total[物理内存总量],

  • 2493092k used[使用的物理内存总量],

  • 1654796k free[空闲内存总量],

  • 158188k buffers[用作内核缓存的内存量]

  • Swap:  5144568k total[交换区总量],

  • 56k used[使用的交换区总量],

  • 5144512k free[空闲交换区总量],

  • 2013180k cached[缓冲的交换区总量]

image-20220623163733402

image-20220623163740159

image-20220623163745027

image-20220623163750129

image-20220623163756922

image-20220623163802524

image-20220623163808620


交互式:输入d,然后输入时间间隔

image-20220623163813898


top -d 3-->3s钟跳一次

image-20220623163821906

image-20220623163828662


[root@test-6 ~]# top -c     (显示完整的命令名)

image-20220623163848604

实战:

找出系统中使用CPU最多的进程

运行top , 找出使用CPU最多的进程 ,按大写的P,可以按CPU使用率来排序显示

image-20220623163900521

在linux系统中一个进程,最多可以使用100%cpu对吗?

如下图,可以看到dirtycow(脏牛漏洞,用于提权) 进程使用196.8%

image-20220623163939845

这是你第一次看见: 1

如果你的4核心的cpu,你可以运行400% 

htop -->top的升级版

大家可能对top监控软件比较熟悉,今天我为大家介绍另外一个监控软件Htop,暂且称之为top的增强版。Htop是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。与Linux传统的top相比,htop更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。与top相比,htop有以下优点:

  • 两者相比起来,top比较繁琐
  • 默认支持图形界面的鼠标操作
  • 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行
  • 杀进程时不需要输入进程号等

htop 官网:http://htop.sourceforge.net/

https://sourceforge.net/projects/htop/ (源码包下载地址)

wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz (ncurses组件下载)

网上资料:

https://www.cnblogs.com/mchina/archive/2013/03/15/2858041.html

https://blog.csdn.net/zisefeizhu/article/details/78995694

https://www.cnblogs.com/enet01/p/8316006.html

源码包安装

# tar zxvf htop-1.0.2.tar.gz
# cd htop-1.0.2
# ./configure

image-20220623164106001

# make && make install

image-20220623164138239

若出现错误:则需安装 ncurses-devel

configure: error: You may want to use --disable-unicode or install libncursesw.

yum install ncurses-devel

htop使用

htop页面信息解释

image-20220623164218131


下面是 F1~F10 的功能和对应的字母快捷键。
Shortcut Key Function Key Description 中文说明
h, ? F1 Invoke htop Help 查看htop使用说明
S F2 Htop Setup Menu htop 设定
/ F3 Search for a Process 搜索进程
\ F4 Incremental process filtering 增量进程过滤器
t F5 Tree View 显示树形结构
<, > F6 Sort by a column 选择排序方式
[ F7 Nice - (change priority) 可减少nice值,这样就可以提高对应进程的优先级
] F8 Nice + (change priority) 可增加nice值,这样就可以降低对应进程的优先级
k F9 Kill a Process 可对进程传递信号
q F10 Quit htop 结束htop

命令行Option(COMMAND-LINE OPTIONS)

-d --delay=DELAY     设置延迟更新时间,单位秒

-u --user=USERNAME    只显示一个给定的用户的过程

-p --pid=PID,PID...       只显示给定的PIDs

-C --no-color        使用一个单色的配色方案

-s --sort-key COLUMN     依此列来排序

-h --help           显示htop 命令帮助信息

-v --version          显示版本信息

交互式命令(INTERACTIVE COMMANDS)

u    显示特定用户进程

M    按Memory 使用排序

P    按CPU 使用排序

T    按Time+ 使用排序

Ctrl-L    刷新

上下键或PgUP, PgDn 选定想要的进程,左右键或Home,End 移动字段,当然也可以直接用鼠标选定进程;

Space    标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill\",将应用于所有已标记的进程

U    取消标记所有进程(空格键选择就可以标记)

s    选择某一进程,按s:用strace追踪进程的系统调用,(s:显示光标所在进程执行的系统调用;)

l    显示进程打开的文件:如果安装了lsof,按此键可以显示进程所打开的文件

+, -    When in tree view mode, expand or collapse subtree. When a subtree is collapsed a \"+\" sign shows to the left of the process name.

a (在有多处理器的机器上)    设置 CPU affinity:标记一个进程允许使用哪些CPU

I    倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然

F    跟踪进程:如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。这对监视一个进程非常有用:通过这种方式,你可以让一个进程在屏幕上一直可见。使用方向键会停止该功能。

K    显示/隐藏内核线程

**H **   显示/隐藏用户线程

**Numbers **   PID 查找: 输入PID,光标将移动到相应的进程上

使用详解:

image-20220623164436465

总述:

上图可以看到四个框框 分别为红色,紫色,黄色,白色
红色:显示的是CPU,物理内存和交换分区的信息;
紫色:显示   量、平均负载和连接运行时间等信息;
黄色:该区为进程区,显示的是当前系统中的所有进程;
白色:该区为操作提示区,显示了当前界面中F1 - F10功能键中定义的快捷功能

详解:
红色框框:从上往下,分别为:CPU,内存,交换分区的使用情况
紫色框框:第一行:进程总数,当前运行的进程数
                 第二行:系统1分钟,5分钟,10分钟的平均负载情况
                 第三行:系统运行的时间
黄色框框:第一行内容为下面行对应位置的说明
               PID:进行的标识号
               USER:运行此进程的用户
               PRI:进程的优先级
               NI:进程的优先级别值,默认的为0,可以进行调整
               VIRT:进程占用的虚拟内存值
               RES:进程占用的物理内存值
               SHR:进程占用的共享内存值
               S:进程的运行状况,R表示正在运行、S表示休眠,等待唤醒、Z表示僵死状态
               %CPU:该进程占用的CPU使用率
               %MEM:该进程占用的物理内存和总内存的百分比
               TIME+:该进程启动后占用的总的CPU时间
               COMMAND:进程启动的启动命令名称

F1:显示帮助信息

image-20220623164557191

F2:配置界面中的显示信息:

鼠标点击Setup或者按下F2 之后进入htop 设定的页面,Meters页面设定了顶端的一些信息显示,顶端的显示又分为左右两侧,到底能显示些什么可以在最右侧那栏新增,要新增到上方左侧(F5)或是右侧(F6)都可以,这就是个人设定的范围了,新增一个时钟

image-20220623164624887

可以通过左右方向键+Enter键+空格键控制选项,也可以通过鼠标点点点+空格键控制选项

image-20220623164653601

image-20220623164659628

Display Options

image-20220623164707248

借用一张图

image-20220623164712248

最后一项的设定是调整 Columns 的显示,就是在一般htop 指令进来希望可以看到的什么样的数据及信息,字段的调整可以在这边做个人化的设定,一般使用系统默认值就好了。

F3:进程搜索:

鼠标点击Search 或者按下F3 或者输入\"/\",输入进程名进行搜索,例如搜索sshd

image-20220623164749808

F4:进程过滤器

按下F4相当于模糊查找,不区分大小写,进入过滤器,相当于关键字搜索,不区分大小写,更加方便查看,例如过滤dev

image-20220623164759704

F5:显示进程数:

输入\"t\"或按下F5,显示树形结构,意思跟pstree差不多,能看到所有程序树状执行的结构,这对于系统管理来说相当方便,理清程序是如何产生的,当然树状结构的浏览也可以依照其他数据来排序。

image-20220623164818431

F6:排序方式

按下F6 就可以选择依照什么来排序,最常排序的内容就是cpu 和memory 吧!

image-20220623164850224

按下F6后会跳转至上图界面,让您选择以什么方式进行排序,在Sort by下选择您要以什么来排序

image-20220623164901385

F7,F8:调整进程nice值:

F7表示减小nice值(增大优先级),F8增大nice值(减小优先级),选择某一进程,按F7或F8来增大或减小nice值,nice值范围为-20-19,此处我把aliyun-service由20调到17

image-20220623164913048

F9:杀掉指定进程:

F7、F8分别对应nice-和nice+,F9对应kill给进程发信号,选好信号回车就OK了

image-20220623164927086

F10:退出htop

显示某个用户的进程,在左侧选择用户

输入\"u\",在左侧选择用户

image-20220623164934850

命令行选项

除了上面介绍的一些热键,htop还提供了很有用的命令行选项。下面是其中一部分:

-s 选项: 按指定的列排序。例如,htop -s PID 命令会按 PID列的大小排序来显示。

-u 选项: 显示指定的用户的进程信息列表。例如,htop -u himanshu 命令会只显示出用户名为 himanshu 的相关进程。

-d 选项: 设置刷新的延迟时间。例如,htop -d 100命令会使输出在1秒后才会刷新(参数 -d 的单位是10微秒)。

Alias top

也许你用惯了top,我们也可以用top来打开htop。

编辑/root/.bashrc文件,添加如下代码

if [ -f /usr/local/bin/htop ]; then
    alias top=’/usr/local/bin/htop’
fi
# source /root/.bashrc

或者:

编辑/etc/bashrc文件,在最后添加上一行

[root@nick tmp]# vim /etc/bashrc
alias  top='/usr/bin/htop'
#查看结果
[root@nick tmp]# cat /etc/bashrc | tail -2
# vim:ts=4:sw=4
alias  top='/usr/bin/htop'
#使之生效
[root@nick tmp]# . /etc/bashrc

atop

atop 和 top,htop 非常相似,它也能监控所有进程,但不同于 top 和 htop的是,它可以按日记录进程的日志供以后分析。它也能显示所有进程的资源消耗。它还会高亮显示已经达到临界负载的资源

atop是一个功能非常强大的linux服务器监控工具,它的数据采集主要包括:CPU、内存、磁盘、网络、进程等,并且内容非常的详细,特别是当那一部分存在压力它会以特殊的颜色进行展示,如果颜色是红色那么说明已经非常严重了

注意:所有的信息都是反映过去10S的状态信息

安装yum install atop -y #epel源

使用:直接在命令行键入atop

image-20220623165149552

参数详解:

atop:该行列出了服务器的host、当前时间、信息收集的频率

PRC:该列展示整个系统的性能状况
    sys:过去10s所有的进程在内核态运行的时间总和
    usr:过去10s所有的进程在用户态的运行时间总和
    #proc:进程总数
    #trun:过去10s转换的进程数
    #zombie:过去10s僵死进程的数量
    #exit:在10s采样周期期间退出的进程数量

CPU: cpu列展示了服务器的CPU整体的一个状态信息,包括内核和用户所占的比例、处理中断所占的比例、CPU的处于空闲下比例(这里是100%*cpu核心数,CPU有时候也会因为由于磁盘性能问题出现等待的空闲)
cpu:每个核心的状态信息,和总的CPU信息一样,每列加起来的总和就是总的CPU的状态信息
    sys:cpu在处理进程时处于内核态的时间所占的比例
    usr:cpu在处理进程时处于用户态的时间所占的比例
    irq:cpu在处理进程的中断请求所占的实际比例
    idle:cpu处于空闲状态下的时间比例(除了本身空闲,还有比如等待磁盘io的情况下也会处于空闲状态)


CPL:cpl也反应了服务器整体的性能,展示信息包括进程等待队列数,分别从过去1分钟、5分钟、15分钟的采样信息。

    avg1:过去1分钟进程等待队列数
    avg5:过去5分钟进程等待队列数
    avg15:过去15分钟进程等待队列数
    csw(context swapping):上下文交换次数
    intr(interrupt):中断发生的次数
    numcpu:cpu的核心数

mem:该列主要展示内存的使用信息。

    tot:物理内存总量
    free:空闲内存的大小(不能单单从这个字段就判断内存不足,还需要参考free -m中的-/+ buffers/cache:free因为这块的内容随时就可以拿过来使用,还可以从是否有使用Swap来判断是否内存不足)
    cache:用于页缓存的内存大小
    dirty:内存中的脏页大小
    buff:用于文件缓存的内存大小
    slab:系统内核占用的内存大小

SWP:交换空间使用情况

    tot:交换空间总量
    free:交换空间剩余空间总量

PAG列:虚拟内存分页情况

swin:换入内存页数
swout:换出内存页数


LVM/DSK:每个分区信息以一列来进行展示

    busy:磁盘忙时所占比例
    read、KiB/r 、MBr/s:每秒读的请求数和请求的kb、mb数
    write、KiB/w 、MBr/w:每秒写的请求数和请求的kb、mb数
    avq:磁盘平均队列长度(根据实际的监控该列好像是磁盘平均请求数avgrq)
    avio:磁盘的平均io时间


NET:展示了传输层(TCP/UDP)、网络层(ip)、网络接口的网络传输信息。

    transport:传输层(TCP/UDP)的数据输入输出的展示,例如在服务器的内部进程之间的数据传输就是在传输层展示,以为还不需要往下通过网络进行传输。

    network:网络层(ip)的数据输入输出的展示;

    eth0:默认的网络接口的数据输入输出的展示,也就是通过etho的ip的数据传输的展示
        sp:网卡的带宽(1000M)
        pcki:传入的数据包的大小
        pcko:传出的数据包的大小
        si:每秒传入的数据大小
        so:每秒传出的数据大小
        coll(collisions):每秒的冲突数
        mlti(MULTICAST):每秒的多路广播的数量
        erri/erro:每秒输入输出的错误数
        drpi/drpo:每秒的输入输出的丢包数
    lo:通过127.0.0.1网络接口的数据传输的数据展示,参数和上面的eth0是一样的

快捷键:
读取atop日志文件: atop  -r  XXX
前进翻页: t
后退翻页: T
进程列表前进翻页: ctrl + f
进程列表后退翻页: ctrl + b
按时间跳转:
 b
 Enter new time (format hh:mm):

 按hh:mm格式输入时间

进程列:展示了每个进程在过去10S内的数据

m模式:内存状态模式
    SYSCPU:过去10s内进程处于内核模式占用的CPU时间
    USRCPU:过去10S进程处于用户模式占用的CPU时间
    VSIZE:过去10S进程占用的虚拟空间大小
    RSIZE:过去10S进程占用的内存空间大小
    PSIZE:过去10S进程占用的页大小
    VGROW:过去10S进程增长的虚拟空间大小
    RGROW:过去10S进程增长的内存大小
    SWAPSZ:过去10S进程使用交换空间的大小。
    MEM:过去10S进程占用内存百分比
d模式:磁盘状态模式;按键d 可以进入磁盘视图,可以查看每个进程占用IO的情况
    RDDSK:过去10S进程读磁盘的数据量
    WRDSK:过去10S进程写磁盘的数据量
    DSK:过去10S进程所占磁盘的百分比
    CMD:进程名 
p模式:进程状态模式,同一个名称的进程显示一列,根据进程名进行分组显示
    NPROCS:相同名称的进程数量
    其它的参数上面已经有列出
v模式:线程状态模式
u模式:用户模式
    根据用户进行分组显示
g模式:标准模式
s:进程当前的状态,包括:s(sleeping),R(runing)等
m, 展示与内存有关的输出
d, 展示与硬盘使用有关的输出
c, 展示每个进程是由哪个命令行启动的
p, 展示进程相关的活动信息
C, 按照 CPU 使用排序
M, 按照内存使用排序
P, 按下后,即可输入正则表达式来搜索对应进程
t, 向前一个采样间隔,在分析 atop 日志时使用
T, 向后一个采样间隔,在分析 atop 日志时使用
v, 输出更详细的进程信息,包括进程的启动时间,进程号,用户和所在组,当前状态

atop的相关文件:
    /etc/atop:目录保存的是atop的配置文件
    /etc/rc.d/init.d/atop:atop的启动文件
    /etc/cron.d/atop:atop的定时任务文件,默认是每天0点开始
    /var/log/atop:atop日志文件,默认是每天0点开始会产生当天的一个日志文件,然后可以通过atop -r file 查看信息,但是没有找到自动播放的的功能,只能通过输入b显示一个指定的时间的信息,可以写个循环来实现
    /usr/bin/atop:atop命令目录


实例1:
atop -r atop_20160510 -b 13:00 -e 17:00 
    atop产生的日志文件信息是10分钟一个采样周期进行记录,可以通过修改/etc/atop/atop.daily文件进行修改。
实例2:
指定了读取哪一天的数据文件,并指定起止时间,-A 参数是输出所有项
$ atopsar -A -b 13:00 -e 13:35  -r atop_20130818


atop数据存储及配置:
/etc/init.d/atop start启动atop后,atop默认采集到的数据文件存放在/var/log/atop目录下。日志文件按天进行保存,默认以"atop_YYYYMMDD"的方式命名、每10分钟采集一次数据、保留最近28天的数据 。以上内容是在配置文件/etc/atop/atop.daily 中进行控制的,如下:

[root@localhost ~]# cat /etc/atop/atop.daily
#!/bin/bash
CURDAY=`date +%Y%m%d`               #保留的文件名,可以进行自定义修改,如:加上主机名
LOGPATH=/var/log/atop
BINPATH=/usr/bin
PIDFILE=/var/run/atop.pid
INTERVAL=600                 # interval 10 minutes ,此处可以修改为30秒或1分钟采集一次
# verify if atop still runs for daily logging
#
if [ -e $PIDFILE ] && ps -p `cat $PIDFILE` | grep 'atop$' > /dev/null
then
        kill -USR2 `cat $PIDFILE`       # final sample and terminate
        CNT=0
        while ps -p `cat $PIDFILE` > /dev/null
        do
                let CNT+=1
                if [ $CNT -gt 5 ]
                then
                        break;
                fi
                sleep 1
        done
        rm $PIDFILE
fi
# delete logfiles older than four weeks
# start a child shell that activates another child shell in
# the background to avoid a zombie
#
( (sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \;)& )  #保留最近28天的数据,可以修改为最近一周的
# activate atop with interval of 10 minutes, replacing the current shell
#
echo $$ > $PIDFILE
exec $BINPATH/atop -a -R -w $LOGPATH/atop_$CURDAY $INTERVAL > $LOGPATH/daily.log 2>&1

glances:更强大的 htop / top 代替者

https://nicolargo.github.io/glances/

https://mp.weixin.qq.com/s?__biz=MzI0MDQ4MTM5NQ==&mid=2247491984&idx=1&sn=72e826fa5f753c29f5d27ca6a5d659e4&chksm=e918848cde6f0d9ad618347732909d7a4f042f6adff6d1dd1ced1bb537de811abd4be9c792f4&scene=21#wechat_redirect

博客参考:

https://linux.cn/article-6882-1.html

https://www.ibm.com/developerworks/cn/linux/1304_caoyq_glances/index.html

Glances介绍

glances是一个基于python语言开发,可以为linux或者UNIX性能提供监视和分析性能数据的功能。glances在用户的终端上显示重要的系统信息,并动态的进行更新,让管理员实时掌握系统资源的使用情况,而动态监控并不会消耗大量的系统资源,比如CPU资源,通常消耗小于2%,glances默认每两秒更新一次数据同时glances还可以将相同的数据捕获到一个文件,便于以后对报告进行分析和图形绘制,支持的文件格式有.csv电子表格格式和和html格式

image-20220623165432211

glances安装方式
  1. 源码安装

  2. pip命令安装

  3. yum安装

源码安装比较复杂,可能会遇到依赖问题不好解决;pip安装和yum安装都可以选择。文档手册:https://glances.readthedocs.io/en/latest/index.html

安装glances

Glances 一般已集成到大多数 Linux 发行版的官方软件源中,可以直接使用系统的包管理器(如apt-get、yum)安装:

yum安装(需要epel源):
yum install epel* -y
yum install glances -y

image-20220623165526122

当然也可以使用 Python 的包管理器(pip 命令)进行安装:

pip install glances

温度监控工具安装

lm_sensors 的软件可以帮助我们来监控主板、CPU的工作电压、风扇转速、温度等数据。这些数据我们通常在主板的 BIOS也可以看到。当我们可以在机器运行的时候通过 lm_sensors 随时来监测着 CPU的温度变化,可以预防和保护因为 CPU 过热而会烧掉。lm_sensors软件监测到的数据可以被 glances 调用并且显示

yum -y install lm_sensors
Glances的使用

Glances 有 4 种颜色标记,分别表示不同的紧急程度:

  • 绿色:OK

  • 蓝色:CAREFUL

  • 紫色:WARNING

  • 红色:CRITICAL

绿色表示性能良好:
(此时 CPU 使用率、磁盘空间使用率和内存使用率低于 50%,系统负载低于 0.7)。

蓝色表示系统性能有一些小问题,用户应当开始关注系统性能:
(此时 CPU 使用率、磁盘空间使用率和内存使用率在 50%-70% 之间,系统负载在 0.7-1 之间)。

品红表示性能报警,应当采取措施比如备份数据:
(此时 CPU 使用率、磁盘空间使用率和内存使用率在 70%-90% 之间,,系统负载在 1-5 之间)。

红色表示性能问题严重,可能宕机:
(此时 CPU 使用率、磁盘空间使用率和内存使用率在大于 90%,系统负载大于 5

glances 使用方法

glances 是一个命令行工具包括如下命令选项:
-b:显示网络连接速度 Byte/ 秒

-B @IP|host :绑定服务器端 IP 地址或者主机名称

-c @IP|host:连接 glances 服务器端

-C file:设置配置文件默认是 /etc/glances/glances.conf

-d:关闭磁盘 I/O 模块

-e:显示传感器温度

-f file:设置输出文件(格式是 HTML 或者 CSV)

-m:关闭挂载的磁盘模块

-n:关闭网络模块

-p PORT:设置运行端口默认是 61209

-P password:设置客户端 / 服务器密码

-s:设置 glances 运行模式为服务器

-t sec:设置屏幕刷新的时间间隔,单位为秒,默认值为 2 秒,数值范围:1~32767

-h : 显示帮助信息

-v : 显示版本信息

glances 工作界面的说明 :

image-20220623165912446

在图中 的上部是 CPU 、Load(负载)、Mem(内存使用)、Swap(交换分区)的使用情况。在图中的中上部是网络接口、Processes(进程)的使用情况。通常包括如下字段:

VIRT: 虚拟内存大小

RES: 进程占用的物理内存值

%CPU:该进程占用的 CPU 使用率

%MEM:该进程占用的物理内存和总内存的百分比

PID: 进程 ID 号

USER: 进程所有者的用户名

TIME+: 该进程启动后占用的总的 CPU 时间

IO_R 和 IO_W: 进程的读写 I/O 速率

NAME: 进程名称

NI: 进程优先级

S: 进程状态,其中 S 表示休眠,R 表示正在运行,Z 表示僵死状态

另外 glances可以使用交互式的方式运行该工具,用户可以使用如下快捷键:

h :显示帮助信息

q :离开程序退出

c :按照 CPU 实时负载对系统进程进行排序

m :按照内存使用状况对系统进程排序

i:按照 I/O 使用状况对系统进程排序

p:按照进程名称排序

d :显示磁盘读写状况

w :删除日志文件

l :显示日志

s:显示传感器信息

f :显示系统信息

1 :轮流显示每个 CPU 内核的使用情况

Glances的C/S模式

glances还支持C/S模式监控,被监控机运行服务端,监控端运行客户端既可以实现远程监控,两端都安装Glances服务即可

服务端启动

服务端使用的端口默认是61209,启动命令如下:

glances -s -B 192.168.1.253
glances server is running on 192.168.1.253:61209

客户端访问

glances -c 192.168.1.253

也可以使用用户名与密码进行访问,默认用户名是glances,如果想更改的话可以使用--username进行更换。下面是官方的原文:

In client/server mode, limits are set by the server side.

You can set a password to access to the server using the --password. By default, the username is glances but you can change it with --username.

image-20220623170037342

客户端连接方式如下:

glances -c 192.168.1.253 --username test
Glances的WebServer 模式

在 glances 的 WebServer模式下,客户端只通过浏览器访问就可以获取远程服务器的运行状态。只需要安装 Python 的 Bottle 模块:

pip install bottle

安装成功后,使用glances -w命令即可开启 WebServer 模式。 客户端使用浏览器访问http://SERVER_IP:61208/进入监控界面

它的WEB模式还可以在手机上看,如下图。

image-20220623170131769

其它高级应用

导出数据为CSV格式,命令如下:

glances --export-csv /tmp/1.csv

glances还可以与InfluxDB、Grafana这些开源软件一起配合,构建成一个监控平台,和其它监控软件一样,能形成实时化、图表化的数据显示

image-20220623170152073

image-20220623170200560

感兴趣的朋友可以自己在测试环境玩玩,一个很好的,功能强大的工具

免责声明: 本文部分内容转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除。