- 进程管理
- 目录
- 什么是进程?
- 进程的分类:
- 进程的特点?
- Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?
- pidof+进程名:查看这个程序的pid
- pgrep+进程名:查看这个程序的pid
- ps -->用于报告当前系统的进程状态
- lsof -->用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)
- pstree-->以树状图的方式展现进程之间的派生关系
- kill-->杀死执行中的程序或工作(常用的2种)
- pkill->可以按照进程名杀死进程
- 杀死所有进程
- 进程的挂起与恢复(ctrl+z;fg/bg)
- nohup->脱机管理
- screen-->脱机管理
- tmux:终端复用工具、替代screen、nohup
- jobs -->显示Linux中的任务列表及任务状态,包括后台运行的任务
- 怎么使一个命令在后台运行?:(命令 &)
- 一个存放内存中的特殊目录/proc
- 进程的执行拥有优先级一说
- uptime查看CPU负载工具
- 实时查看系统运行情况
进程管理
目录
|-进程管理
|-什么是进程?
|-进程的分类?
|-进程的特点?
|-进程的状态?
进程常用命令
|- w查看当前系统信息
|- ps进程查看命令
|- kill终止进程
|- 一个存放内存中的特殊目录/proc
|- 进程的优先级
|- 进程的挂起与恢复
|- 通过top命令查看进程
计划任务
|- 计划任务的重要性
|- 一次性计划at和batch
|- 周期性计划crontab
什么是进程?
========程序与进程====
程序是静态概念,本身作为一种软件资源长期保存;
程序: 二进制文件,静态 /bin/date,/usr/sbin/sshd
而进程是程序的执行过程,它是动态概念,有一定的生命期,是动态产生和消亡的
进程是已启动的可执行程序的运行实例,进程有以下组成部分:
- 已分配内存的地址空间;
- 安全属性,包括所有权凭据和特权;
- 程序代码的一个或多个执行线程;
- 进程状态
下图所示的是进程的生命周期:
程序和进程无一一对应关系。一个程序可以有多个时程公用,另一方面,一个进程在活动中有可顺序的执行若干个程序
进程的分类:
守护进程:daemon(守护进程;后台程序)在系统引导过程中启动的进程,跟终端无关的进程;【多针对服务而言】
前台进程:跟终端相关,通过终端启动的进程【用户调用使用的进程】
Notice:也可以把在前台启动的进程送往后台,以守护模式运行;【可以使用命令实现】&
父子进程的关系
1、子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程
2、在Linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈以及父进程的进程环境。
3、父进程终止子进程自然终止。
前台进程和后台进程:
前台进程:
在shell提示处理打入命令后,创建一个子进程,运行命令,shell等待命令退出,然后返回到对用户给出提示符。这条命令与shell异步运行,即在前台运行,用户在它完成之前不能执行别一个命令。
其实就是,在执行这个命令时,无法进行其他操作,这个查找就属于前台进程
后台进程
在shell提示处打入命令,若后面跟一个&
,shell创建子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与shell同步运行,即在后台运行。"后台进程必须是非交互式的"
再来看这个命令就变成了后台进程,同样的条件进行查找;不影响我们前台其他的操作。
进程的特点?
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 | 表示进程是多线程的 |
+ | 表示当前进程运行在前台 |
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
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)
[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
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
[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
杀不死的进程
lsof -->用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)
lsof 命令是 Linux 系统的扩展工具,它的含义是 list opened filedesciptor (列出已经打开的文件描述符),在 Linux 系统中,所有的与资源句柄相关的东西都可以统一抽象成文件描述符(filedescriptor,简称 fd)。一个文件句柄是一个 fd,一个 socket 对象也可以称之为 fd 等等
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:文件描述符,应用程序通过文件描述符识别该文件。
文件描述符列表:
-
cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
-
txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
-
lnn:library references (AIX);
-
er:FD information error (see NAME column);
-
jld:jail directory (FreeBSD);
-
ltx:shared library text (code and data);
-
mxx :hex memory-mapped type number xx.
-
m86:DOS Merge mapped file;
-
mem:memory-mapped file;
-
mmap:memory-mapped device;
-
pd:parent directory;
-
rtd:root directory;
-
tr:kernel trace file (OpenBSD);
-
v86 VP/ix mapped file;
-
0:表示标准输出
-
1:表示标准输入
-
2:表示标准错误
一般在标准输出、标准错误、标准输入后还跟着文件状态模式:
-
u:表示该文件被打开并处于读取/写入模式。
-
r:表示该文件被打开并处于只读模式。
-
w:表示该文件被打开并处于。
-
空格:表示该文件的状态模式为unknow,且没有锁定。
-
-:表示该文件的状态模式为unknow,且被锁定。
同时在文件状态模式后面,还跟着相关的锁:
-
N:for a Solaris NFS lock of unknown type;
-
r:for read lock on part of the file;
-
R:for a read lock on the entire file;
-
w:for a write lock on part of the file;(文件的部分写锁)
-
W:for a write lock on the entire file;(整个文件的写锁)
-
u:for a read and write lock of any length;
-
U:for a lock of unknown type;
-
x:for an SCO OpenServer Xenix lock on part of the file;
-
X:for an SCO OpenServer Xenix lock on the entire file;
-
space:if there is no lock.
文件类型:
- DIR:表示目录。
- CHR:表示字符类型。
- BLK:块设备类型。
- UNIX: UNIX 域套接字。
- FIFO:先进先出 (FIFO) 队列。
- IPv4:网际协议 (IP) 套接字。
- DEVICE:指定磁盘的名称
- SIZE:文件的大小
- NODE:索引节点(文件在磁盘上的标识)
- 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)
如果想杀死后台的第一个程序必须按照这样输入命令:
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就无法正常运行了
查询后台有哪些程序在运行:jobs
进程的恢复:
bg [前面的序号]
:恢复到前台继续运行;激活后台程序
fg
-->把后台任务调到前台执行(前台的命令行不能用)
说明:如果有多个进程 fg %1
(后台的第一个进程)
fg %2
(后台的第二个进程)
nohup->脱机管理
意思就是关闭了客户端过后程序还是继续运行:nohup ping www.baidu.com &
过滤:查看程序是否运行:ps aux | grep ping
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
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系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到jobs
、bg
、和 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)
一个存放内存中的特殊目录/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
弹出消息含意如下:
任务队列的平均长度是什么?
大厅排除买票:
这时队列是4:
cpu队列数为3时,如图:
如下图: 1人只能买1张票,排第四的人可能会急。 所以我们认为超过3就升级CPU
实时查看系统运行情况
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的信息( 第二、三行)
当有多个CPU时,这些内容可能会超过两行。内容如下:
top
按"z"可以改变内容的颜色。默认的是3s跳一次;
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[缓冲的交换区总量]
交互式:输入d,然后输入时间间隔
top -d 3
-->3s钟跳一次
[root@test-6 ~]# top -c (显示完整的命令名)
实战:
找出系统中使用CPU最多的进程
运行top
, 找出使用CPU最多的进程 ,按大写的P
,可以按CPU使用率来排序显示
在linux系统中一个进程,最多可以使用100%cpu对吗?
如下图,可以看到dirtycow(脏牛漏洞,用于提权) 进程使用196.8%
这是你第一次看见: 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
# make && make install
若出现错误:则需安装 ncurses-devel
configure: error: You may want to use --disable-unicode or install libncursesw.
yum install ncurses-devel
htop使用
htop页面信息解释
下面是 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,光标将移动到相应的进程上
使用详解:
总述:
上图可以看到四个框框 分别为红色,紫色,黄色,白色
红色:显示的是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:显示帮助信息
F2:配置界面中的显示信息:
鼠标点击Setup或者按下F2 之后进入htop 设定的页面,Meters页面设定了顶端的一些信息显示,顶端的显示又分为左右两侧,到底能显示些什么可以在最右侧那栏新增,要新增到上方左侧(F5)或是右侧(F6)都可以,这就是个人设定的范围了,新增一个时钟
可以通过左右方向键+Enter键+空格键控制选项,也可以通过鼠标点点点+空格键控制选项
Display Options
借用一张图
最后一项的设定是调整 Columns 的显示,就是在一般htop 指令进来希望可以看到的什么样的数据及信息,字段的调整可以在这边做个人化的设定,一般使用系统默认值就好了。
F3:进程搜索:
鼠标点击Search 或者按下F3 或者输入\"/\",输入进程名进行搜索,例如搜索sshd
F4:进程过滤器
按下F4相当于模糊查找,不区分大小写,进入过滤器,相当于关键字搜索,不区分大小写,更加方便查看,例如过滤dev
F5:显示进程数:
输入\"t\"或按下F5,显示树形结构,意思跟pstree差不多,能看到所有程序树状执行的结构,这对于系统管理来说相当方便,理清程序是如何产生的,当然树状结构的浏览也可以依照其他数据来排序。
F6:排序方式
按下F6 就可以选择依照什么来排序,最常排序的内容就是cpu 和memory 吧!
按下F6后会跳转至上图界面,让您选择以什么方式进行排序,在Sort by下选择您要以什么来排序
F7,F8:调整进程nice值:
F7表示减小nice值(增大优先级),F8增大nice值(减小优先级),选择某一进程,按F7或F8来增大或减小nice值,nice值范围为-20-19,此处我把aliyun-service由20调到17
F9:杀掉指定进程:
F7、F8分别对应nice-和nice+,F9对应kill给进程发信号,选好信号回车就OK了
F10:退出htop
显示某个用户的进程,在左侧选择用户
输入\"u\",在左侧选择用户
命令行选项
除了上面介绍的一些热键,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
参数详解:
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格式
glances安装方式
-
源码安装
-
pip命令安装
-
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
当然也可以使用 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 工作界面的说明 :
在图中 的上部是 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.
客户端连接方式如下:
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模式还可以在手机上看,如下图。
其它高级应用
导出数据为CSV格式,命令如下:
glances --export-csv /tmp/1.csv
glances还可以与InfluxDB、Grafana这些开源软件一起配合,构建成一个监控平台,和其它监控软件一样,能形成实时化、图表化的数据显示
感兴趣的朋友可以自己在测试环境玩玩,一个很好的,功能强大的工具
免责声明: 本文部分内容转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除。