图片 6

第十四节课,进程命令

pidof

   
我们知道每个小孩一出生就会一个全国唯一的编号来对其进行标识,用于以后上学,办社保等,就是我们的身份证号。那么在Linux系统中,用来管理运行程序的标识叫做PID,就是大家熟知的进程ID。那么如何来找到程序的PID了,那么就需要用到命令pidof,其功能主要用来查看运行程序的PID。

FUSER

fuser功能
fuser
可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息.

fuser显示使用指定文件或者文件系统的进程ID.默认情况下每个文件名后面跟一个字母表示访问类型。

访问类型如下:
c 代表当前目录
e 将此文件作为程序的可执行对象使用

f 打开的文件。默认不显示。
F 打开的文件,用于写操作。默认不显示。

r 根目录。
m 映射文件或者共享库。

s
将此文件作为共享库(或其他可装载对象)使用
当指定的文件没有被访问,或者出现错误的时候,fuser会返回非零。
为了查看使用tcp和udp套接字的进程,需要-n选项并指定名称空间。默认IpV4和IpV6都会显示。套接字可以是本地的或者是远程的端口,和远程的地址。所有的域是可选的,但是其前面的’,’必须存在。如下:
[lcl_port][,[rmt_host][,[rmt_port]]]
对于ip地址和port,名称和数字表示都可以使用。
fuser只把PID输出到标准输出,其他的都输出到标准错误输出。
常用选项
-a 显示所有命令行中指定的文件,默认情况下被访问的文件才会被显示。
-c 和-m一样,用于POSIX兼容。
-k 杀掉访问文件的进程。如果没有指定-signal就会发送SIGKILL信号。
-i 杀掉进程之前询问用户,如果没有-k这个选项会被忽略。
-l 列出所有已知的信号名称。
-m name
指定一个挂载文件系统上的文件或者被挂载的块设备(名称name)。这样所有访问这个文件或者文件系统的进程都会被列出来。如果指定的是一个目录会自动转换成”name/”,并使用所有挂载在那个目录下面的文件系统。
-n space
指定一个不同的命名空间(space).这里支持不同的空间文件(文件名,此处默认)、tcp(本地tcp端口)、udp(本地udp端口)。对于端口,
可以指定端口号或者名称,如果不会引起歧义那么可以使用简单表示的形式,例如:name/space
(即形如:80/tcp之类的表示)。
-s 静默模式,这时候-u,-v会被忽略。-a不能和-s一起使用。
-signal
使用指定的信号,而不是用SIGKILL来杀掉进程。可以通过名称或者号码来表示信号(例如-HUP,-1),这个选项要和-k一起使用,否则会被忽略。
-u 在每个PID后面添加进程拥有者的用户名称。
-v
详细模式。输出似ps命令的输出,包含PID,USER,COMMAND等许多域,如果是内核访问的那么PID为kernel.
-V 输出版本号。
-4
使用IPV4套接字,不能和-6一起应用,只在-n的tcp和udp的命名存在时不被忽略。
-6
使用IPV6套接字,不能和-4一起应用,只在-n的tcp和udp的命名存在时不被忽略。

  • 重置所有的选项,把信号设置为SIGKILL. 

使用示例

显示使用某个文件的进程信息
$ fuser -um /dev/sda2
/dev/sda2: 6378c(quietheart) 6534c(quietheart) 6628(quietheart)
6653c(quietheart) 7429c(quietheart) 7549c(quietheart)
7608c(quietheart)
这个命令在umount的时候很有用,可以找到还有哪些用到这个设备了。

杀掉打开readme文件的程序

$fuser
-m -k -i readme
这里,会在kill之前询问是否确定。最好加上-v以便知道将要杀那个进程。

查看那些程序使用tcp的80端口
$fuser -v -n tcp 80

$fuser
-v 80/tcp
fuser不同信号的应用
用 -l参数可以列出fuser所知的信号
# fuser -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM
TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO
PWR SYS
UNUSED
fuser可以发送它已知的信号给访问的指定文件进程而代替-k参数默认发送的SIGKILL,例如:只是挂起进程,那么发送HUP信号就可以了
# fuser -v /root/install.log
用户 进程号 权限 命令
/root/install.log: root 3347 f…. tail
# fuser -k -SIGHUP /root/install.log
/root/install.log: 3347
# fuser -v /root/install.log

一,为什么要使用fuser?
   先说
fuser的作用,
  
fuser能识别出正在对某个文件或端口访问的进程
  
大家想一下,还有哪个命令具备这个功能?
  
没错,是lsof,
   我们前面讲过,
lsof能够找出正在对指定文件访问的进程,
  
那么它们两者之间有何区别?
  
fuser有一个特别的用法在于它可以一次杀死那些正在访问指定文件的进程
   

二,如何使用fuser?
 
  
1,如何用fuser得到正在使用指定文件的进程?
     用法: fuser
文件
    
说明:它会把正在使用当前文件的进程id列出

     [root@localhost
lhd]# umount /
     umount: /:
device is busy.
           (In some
cases useful info about processes that use
            the
device is found by lsof(8) or fuser(1))
     [root@localhost
lhd]# fuser /
     
/:                       1rc     2rc     3rc     4rc     5rc     6rc    
7rc    80rc    82rc    84rc    85rc   153rc   157rc   158rc

                               160rc   165rc   168rc  203rc   204rc  
205rc   253rc   441rc   444rc   516rc   521rc   524rc   582rc  
583rc

                               584rc   633rc  1052rc  1392rc  1394rc 
1417rc  1597rc  1609rc  1617rc  1620rc  1683rc  1744rc  1783r 
1785rc

                               1788rc  1806r  1808r  1810rc  1811rc 
1812rc  1813rc  1814rc  1815rc  1848rc  1886rc  1899rc  1900rc 
2001rc

                               ……太多不一一列出

      说明:
     
这些进程号后面的rc是什么意思?
     
      c
将此文件作为当前目录使用。
      e
将此文件作为程序的可执行对象使用。
      r
将此文件作为根目录使用。
      s
将此文件作为共享库(或其他可装载对象)使用

  
2,如何列出进程的详细信息,而不仅仅是进程id?
     用
-v参数即可
     说明: -v: 
含义是:verbose output,详细的输出信息
     例子:

     [root@dev ~]#
fuser /var/log
    
/var/log:             4196c
     [root@dev ~]#
fuser -v /var/log
     

                          USER        PID ACCESS COMMAND
    
/var/log:            root       4196 ..c.. bash

   
3,如何列出进程所属的用户?
     用
-u参数即可
     说明: -u:
含义:display user IDs,显示用户id
    
     例子:
     [root@dev ~]#
fuser -u /var/log
    
/var/log:             4196c(root)
     说明: -n:
含义:获得正在访问某一端口的进程号,然后可以用kill命令杀死。

     [root@dev ~]#
fuser -un tcp 25
     
25/tcp:             4196(root)
    
4,如何杀死所有正在访问指定文件的进程?
     用
-k参数即可
     说明: -k:含义:
kill processes accessing the named file

     例子:

     [root@localhost
lhd]# fuser -v /root/install.log

                          用户     进程号 权限   命令
    
/root/install.log:   root       3185 f…. tail
     [root@localhost
lhd]# fuser -k /root/install.log
    
/root/install.log:    3185
     [root@localhost
lhd]# fuser -v /root/install.log

     说明:
-k参数能够杀死所有的正在访问指定文件的进程,所以用来杀进程时非常方便
     说明之二:
fuser如何杀死的进程?
            
它发送的是这个信号:SIGKILL

三,多学一点知识

   
1,fuser可以列出它所知的信号:
     用
-l参数即可
    
     例子:
     [root@dev ~]#
fuser -l
     HUP INT QUIT ILL
TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
     STKFLT CHLD CONT
STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
     UNUSED

   
2,fuser可以发送它已知的信号给访问的指定文件进程而代替-k参数默认发送的SIGKILL
     
例如:只是挂起进程,那么发送HUP信号就可以了
    
      例子:
     
[root@localhost lhd]# fuser -v /root/install.log

                           用户     进程号 权限   命令
     
/root/install.log:   root       3347 f…. tail
     
[root@localhost lhd]# fuser -k -SIGHUP /root/install.log
     
/root/install.log:    3347
     
[root@localhost lhd]# fuser -v /root/install.log

centos Linux系统日常管理1  cpuinfo cpu核数   命令 w, vmstat, uptime ,top
,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课

基本用法

pidof [选项] [程序名]

其常用选项参数如下所示:

选项 说明
-s 仅返回一个PID
-c 仅返回具有相同root目录的PID
-x 显示由脚本开启的进程
-o omitpid 忽略指定的PID
pidof命令的返回值通常只有两个:
- 0:pidof命令至少找到一个对应的PID
- 1:pidof没有找到任何匹配的PID

LSOF

lsof 拥有更多的功能
# lsof -i 看系统中有哪些开放的端口,哪些进程、用户在使用它们,比
netstat -lptu 的输出详细。

# lsof -i 4  查看IPv4类型的进程
COMMAND    PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4     2213 Debian-exim    4u  IPv4   4844       TCP *:smtp
(LISTEN)
dhclient3 2306        root    4u  IPv4   4555       UDP *:bootpc

# lsof -i 6  查看IPv6类型的进程
COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2213 Debian-exim    3u  IPv6   4820       TCP *:smtp (LISTEN)

# lsof -i @192.168.1.2  查看与某个具体的IP相关联的进程
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
amule   3620 root   16u  IPv4  11925       TCP
192.168.1.2:42556->77.247.178.244:4242 (ESTABLISHED)
amule   3620 root   28u  IPv4  11952       TCP
192.168.1.2:49915->118-166-47-24.dynamic.hinet.net:5140
(ESTABLISHED)

# lsof -p 5670 查看PID为5670的进程打开的文件。

 

用法示例

1、显示运行程序的PID

[root@localhost ~]# pidof sshd
34128 34059 28835 28820 24697 24627 23228 23215 1995

在显示的结果可以看到共有9个PID,则说明服务器上9个进程均是由sshd启动的。

2、显示Shell的进程

[root@localhost ~]# cat test.sh
#!/bin/bash
i=1;
while [ $i -le 10000 ]
do
 echo $i
 i=$((i+1))
 sleep 120s
done
[root@localhost ~]# ./test.sh &
[root@localhost ~]# pidof -x test.sh
36554

3、显示指定程序的PID

[root@localhost ~]# pidof -s sshd
7524

4、忽略指定的PID

[root@localhost ~]# pidof sshd
9104 9103 7524 7434 4474 4462 1995
[root@localhost ~]# pidof sshd -o 1995
11979 11978 7524 7434 4474 4462

上半节课

lsof

   
在Windows中删除文件时,会出现被占用而暂时无法删除的情况,这个我们会一款非常好用的软件Unlocker,那么在Linux中类似的情况如何处理了?今天我们来学习lsof命令。
    lsof全称list open
files
。用于查看进程打开的文件、目录和套接字等信息。

w
uptime

基本用法

pidof [选项] [文件名]

其常用选项参数如下所示:

选项 说明
-?或-h 显示帮助信息
-a 显示打开文件存在的进程
-c 进程名 显示指定进程所打开的文件
-d FD 显示文件描述符(FD)占用的进程
+d 目录名 显示当前目录下被打开的文件
+D 目录名 递归显示当前目录下被打开的文件
-i 条件 显示符合条件的进程
-p pid 显示指定PID打开的文件
-u uid 显示指定UID打开的文件
-g 显示所属组标识符PGID
R 显示父进程PPID

其中选项 -i 支持的条件如下所示:

条件 说明 示例
4/6 IPv4/ IPv6 lsof -i
protocol UDP/TCP lsof -i TCP
hostname 网络主机名 lsof -i@localhost
hostaddr 网络地址 lsof -i@192.168.8.8
service 服务名称,可查看/etc/services lsof -i:ssh
port 端口 lsof -i:22

lsof输出的详细信息解释如下:

  • COMMAND:进程名称,如果名称较长,则默认只显示前9个字符
  • PID:进程标识符,如果添加-R参数,则显示父进程PPID
  • USER:进程所有者,如果添加-g参数,则显示组标识符PGID
  • FD:文件描述符
  • TYPE:文件类型,常见类型如下所示:
    DIR:表示目录
    REG:表示普通文件
    CHR:表示字符类型
    BLK:表示块设备类型
    UNIX:表示UNIX套接字
    FIFO:表示先进先出队列
    IPv4:表示IPv4套接字
    IPv6:表示IPv6套接字

文件描述符FD,但却可以表示两类内容:

  • 第一类是文件描述符
    0:标准输入
    1:标准输出
    2:标准错误输出
    n:其他文件描述符的数值

图片 1

  • 第二类描述文件特征的标识
    CWD:表示应用程序的当前工作目录,即程序启动的目录
    txt:表示文件类型为程序代码或数据
    mem:内存映射文件
    pd:父目录
    rtd:根目录
    DEL:表示文件已经删除但还存在于内存中

 

用法示例

1、通过文件定位占用的进程

[root@localhost ~]# top -d 2 > top.txt
[root@localhost ~]# lsof top.txt
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
  Output information may be incomplete.
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
top     8900 root    1w   REG    8,2    69035 469790741 top.txt

2、通过文件描述符定位进程

[root@localhost ~]# lsof -d 5 | head -3
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
   Output information may be incomplete.
COMMAND  PID  USER   FD   TYPE      DEVICE SIZE/OFF NODE       NAME
systemd  1    root   5u   a_inode   0,10     0     7450       [signalfd]
Xvnc     2678 root   5u   IPv6      41776    0t0   TCP *:6003 (LISTEN)

3、通过进程定位文件

[root@localhost ~]# ps -ef |grep -i  mysql | grep -v grep
mysql 2680  1  2 7月19 ?  11:44:50 /usr/libexec/mysqld --basedir=/usr
[root@localhost ~]# lsof -p 2680 | head -3
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
     Output information may be incomplete.
COMMAND  PID  USER   FD    TYPE  DEVICE SIZE/OFF  NODE   NAME
mysqld  2680  mysql  cwd   DIR   8,2    4096      319571 /var/lib/mysql
mysqld  2680  mysql  rtd   DIR   8,2    254       512    /

4、查看用户打开的文件

[root@localhost ~]# lsof -u root | tail -3
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
   Output information may be incomplete.
COMMAND   PID   USER  FD     TYPE DEVICE  SIZE/OFF NODE NAME
kworker/3 39337 root  cwd    DIR  8,2     254      512  /
kworker/3 39337 root  rtd    DIR  8,2     254      512  /
kworker/3 39337 root  txt   unknown                     /proc/39337/exe

5、查看程序所占用的端口

[root@localhost ~]# lsof -i:22
COMMAND PID    USER   FD  TYPE  DEVICE      SIZE/OFF NODE NAME
sshd    27597  root   3u  IPv4 1460505039   0t0      TCP *:ssh (LISTEN)
sshd    27597  root   4u  IPv6 1460505041   0t0      TCP *:ssh (LISTEN)

下半节课

fuser

    fuser主要用于显示进程正在使用的文件、套接字、挂载点等。

top
kill命令
vmstat
ps
free
netstat
ulimit
sar
lsof
pidof

基本用法

fuser [选项] [文件名]

其常用选项如下所示:

选项 说明
-a ,–all 显示命令行中指定的所有文件
-c 同-m选项,用于兼容POSIX
-k, –kill 杀掉使用文件的进程
-i, –interactive 杀掉进程前需要用户确认,如果无-k参数则默认忽略该参数
-l, –list-signals 显示所有已知的 signal名称
-m NAME, –mount NAME 指定一个挂载的文件系统或被挂载的设备
-n SPACE 指定一个不同的命名空间,支持不同的命名空间文件(默认为文件名)、UDP(本地UDP端口)、TCP(本地TCP端口),为避免歧义,可以使用name/space形式,如80/tcp
-w 仅杀掉拥有写入权限的进程,如果无-k参数则默认忽略该参数
-s, –silent 静默模式,-u和-v忽略该参数
-u, –user 在PID后显示所属的用户名
-v, –verbose 显示详细信息
-4, –ipv4 仅搜索IPv4的套接字
-6, –ipv6 仅搜索IPv6的套接字

fuser显示指定文件或文件系统的进程PID,在默认模式中,每个文件名后面会用一个字母表示访问类型,如下所示:

  • c:表示当前目录
  • e:表示该文件为可执行文件
  • f:表示被打开的文件,默认模式中f不显示
  • F:表示被打开的文件,用于写入操作,默认模式中F不显示
  • r:根目录
  • m:映射文件或共享lib

-f 和 -F 只有与选项 -v 一起使用的时候才会显示,其他情况则默认不显示

 

用法示例

1、杀掉所有占用/home的进程

[root@localhost ~]# fuser -km /home

2、显示本地所有mysql上端口进程

[root@localhost ~]# fuser mysql/tcp
mysql/tcp:            2680

3、显示详细的信息

[root@localhost ~]# fuser -v top.txt
                     用户     进程号  权限   命令
/root/top.txt:       root     15847 F....  top

4、查看有多个进程正在使用某个目录下文件系统,包含子目录

[root@localhost ~]# fuser -v -m /home/data
                     用户     进程号 权限   命令
/home/data:          root     kernel mount /home/data

5、通过端口定位进程

[root@localhost ~]# fuser -v -n tcp 22
                     用户     进程号 权限   命令
22/tcp:              root      27597 F.... sshd
                     root      31119 F.... sshd
或
[root@localhost ~]# fuser -v 22/tcp
                     用户     进程号 权限   命令
22/tcp:              root      27597 F.... sshd
                     root      31119 F.... sshd

 

fuser与lsof对比

对比项 fuser lsof
定位方式 通过文件查找进程 通过进程查找文件
所属标准 POSIX
参数类型 文件/网络端口 文件/PID/网络端口
进程输出 PID PID详细信息
是否可发送信息 可以,使用-k 不可以

 

ps

   
在Windows系统中用于查看进程通常是通过任务管理器。而在Linux中,我们用ps(Process
Status)命令来查看进程。

 

基本用法

ps [选项]

其常用选项如下所示:

选项 说明
-A 显示所有进程,同选项-e
-a 显示所有进程,但排除新会话的首进程和无控制终端的进程
-d 显示所有进程,但排除新会话的首进程
-e 显示所有进程,同选项-A
r 仅显示正在运行的进程
-C cmdlist 显示指定命令的进程信息
-p pidlist 显示指定PID的进程
-t ttylist 显示指定tty的进程
-u userlist 显示指定有效用户ID或名字的进程
-c 显示CLS和PRI列
-f 添加详细列信息,通常与其他选项联合使用
-x 没有关联到终端上的进程也进行显示
-o 仅显示自定义的列
-l 仅显示属于当前登录用户的PID与相关信息列表
–sort spec 对输出信息进行排序 + 升序排序 – 降序排序

 

用法示例

1、不带参数的示例

[root@localhost ~]# ps
  PID TTY          TIME CMD
11047 pts/0    00:00:00 ps
24892 pts/0    00:00:00 su
25142 pts/0    00:00:00 bash

2、仅显示与当前用户相关的进程和相关信息

[root@localhost ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 R     0 22720 25142  0  80   0 - 38292 -      pts/0    00:00:00 ps
4 S     0 24892 22641  0  80   0 - 58599 do_wai pts/0    00:00:00 su
4 S     0 25142 24892  0  80   0 - 29305 do_wai pts/0    00:00:00 bash
  • F:表示进程标志,说明当前进程的权限,若为4表示进程权限为root,若为1表示些子进程仅可进行复制(fork)而无法实际运行
  • S:表示进程状态,主要状态有:
      R:进程正在运行
      S:进程处于睡眠状态,但可以被唤醒
      D:进程处于不可被唤醒的睡眠状态,通常该进程可能在等待I/O
      T:停止状态,可能是在工作控制或除错状态
      Z:僵尸状态,进行已经终止但却无法释放内存等
  • UID/PID/PPID:进行的所属UID/PID/PPID
  • C:CPU使用率,单位为%
  • PRI/NI:Priority/Nice缩写,表示进程被CPU执行的优先级,数值越小越快被CPU执行
  • ADDR:与内存相关,ADDR表示该进程在内存的哪个部分,如果是Running进程,会显示 –
  • SZ:与内存相关,表示该进程使用了多少内存;
  • WCHAN:与内存相关,表示该进程目前是否正在运行,-表示正在运行中
  • TTY:启动进程的终端名称
  • TIME:进程的实际CPU占用时间之和,单位为秒
  • CMD:进程命令

3、查看系统所有进程

[root@localhost ~]# ps aux
USER PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root   2  0.0  0.0      0     0 ?        S    8月08   0:00 [kthreadd]
root   3  0.0  0.0      0     0 ?        S    8月08   0:03 [ksoftirqd/0]
root   5  0.0  0.0      0     0 ?        S<   8月08   0:00 [kworker/0:0H]
root   8  0.0  0.0      0     0 ?        S    8月08   0:00 [migration/0]
  • USER:进程所属用户
  • PID:进程标识符
  • %CPU:进程的CPU占比
  • %MEM:进程物理内存占比
  • VSZ:进程虚拟内存(KB)使用量
  • RSS:进程占用的固定内存量(KB)
  • TTY:启动进程的终端名称
  • STAT:进程状态
  • START:进程启动时间
  • TIME:进程的实际CPU占用时间之和
  • COMMAND:进程命令

在Linux中ps通常有三种不同的书写格式

  • BSD格式:选项前不加短横线 – ,多个选项可以组合使用如ps aux
  • UNIX格式:选项前加短横线 -,多个选项可以组合使用如ps -aux
  • GNU长格式:选项前加双短横线 –,如 ps –context

因此ps aux 和ps -aux 在显示的输出信息是一样的。

4、显示自定义列

[root@localhost ~]# ps -eo pid,user,cmd
PID USER     CMD
  2 root     [kthreadd]
  3 root     [ksoftirqd/0]
  5 root     [kworker/0:0H]
  8 root     [migration/0]

5、对输出结果进行排序

[root@localhost ~]# ps -ef --sort=uid,-ppid,+pid
UID  PID    PPID  C STIME TTY        TIME CMD
root 31637 31624  0 17:42 pts/1  00:00:00 less -s
root 40772 25142  0 17:44 pts/0  00:00:00 ps -ef --sort=uid,-ppid,+pid
root 40773 25142  0 17:44 pts/0  00:00:00 more
root 25142 24892  0 15:32 pts/0  00:00:00 bash
root 31624 24164  0 17:42 pts/1  00:00:00 man ps
root 24164 23955  0 15:32 pts/1  00:00:00 bash
root 23955 23586  0 15:32 pts/1  00:00:00 su root
root 24892 22641  0 15:32 pts/0  00:00:00 su root

 

pstree

   
在使用ps查看进程十分方便,但若想查看详细进程和子进程时,则需要使用pstree全命令。由于pstree不是系统自带,需要自行安装

yum -y install pstree

监控系统状态命令:w, vmstat, uptime ,top

基本语法

pstree [选项]

常用选项如下所示:

选项 说明
-a 显示每个进程的完整指令,包括路径、参数等
-h 高亮显示当前进程及父进程
-g 显示PGID
-n 相同父进程下,按各自的PID进行排序
-p 显示PID
-s 显示父进程
-u username 显示UID信息

 

kill

   
在Windows系统中,当某个一个程序出现假死或无反应时,我们常常打开任务管理器,找到对应的进程,然后杀掉该进程。在命令行盛行的Linux中,我们该使用哪个命令?常用于杀掉进程的命令非kill莫属了。

 

基本用法

kill [选项] [PID]

其常用选项如下所示:

选项 说明
-s signal 向目标进程发送指定的信号类型,信号可以为名称或数字
-l 显示信号名称列表,如果在-l加编号则查看信号名称,反之亦然
-a 处理当前进程时,不限制命令和PID的对应关系
-p 指定kill命令仅显示相关进程的进程号,而不发送任何信号
  • 无选项:表示向目标进程发送默认的终止信号,即SIGTERM
  • PID>0:表示向目标进程发送信号,此处的PID可以是多个PID,用空格进行分隔
  • PID=0:表示向当前进程组的所有进程发送信号
  • PID=-1:表示向除当前 kill 进程和 init 进程之外的所有进程发送信号
  • PID<-1:表示向进程组PGID的所有进程发送信号,如-123,则向进程组PGID为123的所有进程发送信号

w

用法示例

1、显示信号列表
图片 2

除以上显示信号,还有一个特殊的编号0为测试信号,其作用如下:

  • 用于测试目标进程是否存在

[root@localhost ~]# kill -l 0
T
[root@localhost ~]# kill -0 99999
bash: kill: (99999) - 没有那个进程
  • 用于测试当前用户是否拥有向该进程发送信号的权限

[admin@localhost ~]# kill -0 2325
bash: kill: (2325) - 操作不被允许

2、查看信号对应的编号或名称

[root@localhost ~]# kill -l SIGHUP
1
[root@localhost ~]# kill -l KILL
9
[root@localhost ~]# kill -l 9
KILL

在Linux中常用信号如下所示:

信号名称 编号 解释
HUP 1 终端断线
INT 2 中断(同Ctrl+C)
QUIT 3 退出(同Ctrl+)
KILL 9 强制终止
TEEM 15 终止
CONT 18 继续(与STOP相反)
STOP 19 暂停(同Ctrl+Z)

3、强制终止进程

[root@localhost ~]# kill -9 26744
[root@localhost ~]# kill -kill 30470

在使用kill -9需要注意的事项如下所示:

  • kill不能杀死进程为1的init进程
  • 在使用kill
    -9时是强行终止进程且没有通知目标进程进行自我清理,而是突然被中止,可以造成资源无法正常释放,数据无法同步到磁盘等,在使用前需要三思

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:
图片 3

# w
12:27:16 up 16 min (运行天数), 2 users (当前系统登录用户数
如果要删除某个用户可以查看有多少用户登录了系统)
,

load average: 0.06, 0.03, 0.00 单位时间段内CPU平均消耗 

三个数分别代表不同时间段的系统平均负载(一分钟、五分钟、十五分钟)
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 – 12:26 5.00s 0.01s 0.00s -bash (本地用户
root pts/0 192.168.0.101 12:26 0.00s 0.07s 0.00s
w  (远程用户

图片 4

 

注意:load
average的最大值不可能超过CPU逻辑核数,比如8逻辑核CPU,load
average不可能达到9.00 !

每次远程连接Linux都会显示w命令信息

 15:18:09 up 4 days, 21:19,  2 users, 
load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
steven   pts/0    113.x.x.x  15:15   41.00s  0.01s  0.02s sshd: steven
[priv]
steven   pts/1     113.x.x.x
15:18    0.00s  0.01s  0.02s sshd: steven [priv]

 

ab(apache benchmark测试工具):测试apache

 

uptime

# uptime
14:43:50 up 2 days, 20:45, 1 user, load average: 0.00, 0.00, 0.00

 

 


 

下半节课

 

 

top

# top
top – 14:46:57当前时间 up 2 days, 20:48 已经运行了多少时间, 1 user, load
average: 0.00, 0.00, 0.00
Tasks: 89 total 89个进程, 1 running, 88 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa io等待cpu, 0.0%hi,
0.0%si, 0.0%st
Mem: 1922484k total 2G内存, 449604k used, 1472880k free, 166384k buffers
Swap: 0k total 无swap, 0k used, 0k free, 173156k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19356 1492 1192 S 0.0 0.1 0:00.58 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd

us:用户态
sy:内核态
wa:wait等待时间
id:空闲
ni:优先值
buffer:缓冲
cache:缓存
下面部分
PR:优先级
NI:NICE 优先值 -20~19 数值越小优先级越高,用户层概念 nice
值可调整的范围为 -20 ~ 19 # nice [-n 数字] command
VIRT:虚拟内存 
RES+SWAP,包括mmap分配的内存
RES:真正内存 没有被换出的, 要关注
SHR:共享内存
S:状态
%CPU:CPU百分比 top默认以CPU排序
8逻辑核CPU 当%CPU为800的时候 才说明CPU才完全占满
%MEM:内存百分比
TIME+:在CPU运行了多长时间
COMMAND:命令

 

用于动态监控进程所占系统资源,每隔3秒变一次。
RES 这一项为进程所占内存大小,而 %MEM 为使用内存百分比
按 “shift + m”,
可以按照内存使用大小排序。

按 “shift + p”,
可以按照CPU使用排序。

按数字 ‘1’
可以列出各颗cpu的使用状态。

top -bn1 它表示非动态打印系统资源使用情况,可以用在shell脚本中
top -c 最右侧的命令可以显示更详细的信息 例如命令路径

 

 

kill命令

少使用  kill -9 进程ID 
尽量用  killall 进程名 

 

w,uptime,top显示的第一行都是一样的

 

 

 

vmstat

#vmstat 1  //每一秒打印一次
#vmstat 1 10   //每一秒打印一次 打印十次后结束打印

-t参数:执行vmstat命令,该命令将会在每一行输出后都带一个时间戳   vmstat
-t  1 5
-s参数:将输出各种事件计数器和内存的统计信息。   vmstat -s
-d参数:将会输出所有磁盘的统计信息。  vmstat -d
-S和-M参数:(大写和MB)将会以MB为单位输出。vmstat默认以KB为单位输出统计信息。
 vmstat -S -M  1  5

vmstat各指标含义:

–proc进程相关——————————————————————————-
r :run
表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;
b :表示等待资源的进程数,比如等待I/O,
内存等,这列的值如果长时间大于1,则需要关注一下了
–swap
交换分区相关的—————————————————————————
si :由交换区进入内存的数量; swap–》内存
so :由内存进入交换区的数量;
–io
磁盘—————————————————————————————
bi :从块设备读取数据的量(读磁盘); 磁盘–》内存
bo: 从块设备写入数据的量(写磁盘);
–system
系统相关的———————————————————————–
in : 每秒的软中断次数,包含时钟中断;
cs : 每秒的上下文切换次数;
–cpu
cpu相关的———————————————————————–
wa :表示I/O等待所占用cpu时间百分比.
us :用户态
sy :内核态
id :空闲


 

 

ps
ps 查看系统进程  process show

-A 显示所有进程(等价于-e)(utility)
-a 显示一个终端的所有进程,除了会话引线
-C  ps -C nginx 只显示某个程序的所有进程
-N 忽略选择。
-d 显示所有进程,但省略所有的会话引线(utility)
-x
显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)
-p pid 进程使用cpu的时间
-u uid or username 选择有效的用户id或者是用户名
-g gid or groupname 显示组的所有进程。
U username 显示该用户下的所有进程,且显示各个命令的详细路径。如:ps U
zhang;(utility)
-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.
-l 长格式(有F,wchan,C 等字段)
-j 作业格式
-o 用户自定义格式。
v 以虚拟存储器格式显示
s 以信号格式显示
-m 显示所有的线程
-H 显示进程的层次(和其它的命令合用,如:ps -Ha)(utility)
e 命令之后显示环境(如:ps -d e; ps -a e)(utility)
h 不显示第一行

ps aux / ps -elf
PID
:进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,
比如我想终止某一个进程,则用 ‘kill
进程的pid’有时并不能杀掉,则需要加一个-9选项 kill -9 进程pid

ps aux
%CPU 进程的cpu占用率
%MEM 进程的内存占用率
VSZ 进程所使用的虚存的大小(Virtual Size)
RSS 进程使用的驻留集大小或者是实际内存的大小,单位 KB。

 

 ps -eo ppid,pid,user,args |grep mysql
 1  7348 root     /bin/sh /usr/local/mysql/bin/mysqld_safe
–datadir=/data/mysql/mysql3306/data
–pid-file=/data/mysql/mysql3306/tmp/mysql.pid
 7348  8463 mysql    /usr/local/mysql/bin/mysqld
–basedir=/usr/local/mysql –datadir=/data/mysql/mysql3306/data
–plugin-dir=/usr/local/mysql/lib/plugin –user=mysql
–log-error=/data/mysqlmysql3306/logs/error.log
–pid-file=/data/mysql/mysql3306/tmp/mysql.pid
–socket=/data/mysql/mysql3306/tmp/mysql.sock –port=3306

ps axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
2 3 0 0 ? -1 S 0 0:00 \_ [migration/0]
2 4 0 0 ? -1 S 0 0:18 \_ [ksoftirqd/0]

STAT :表示进程的状态,进程状态分为以下几种
D 不能中断的进程(通常为IO)
R 正在运行中的进程
S 已经中断的进程,系统中大部分进程都是这个状态
T 已经停止或者暂停的进程,如果我们正在运行一个命令,比如说 sleep 10
如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态
X 已经死掉的进程(这个从来不会出现)
Z
僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了,只能重启服务器解决。
< 高优先级进程
N 低优先级进程
L 在内存中被锁了内存分页
s 主进程
l 多线程进程

  • 在前台的进程

 

watchdog:监视非常重要的进程,发现死掉的话帮忙拉起重要进程

 

 

 

free

查看内存使用情况

-b  以Byte为单位显示内存使用情况。
-k  以KB为单位显示内存使用情况。
-m  以MB为单位显示内存使用情况。
-g   以GB为单位显示内存使用情况。
-o  不显示缓冲区调节列。
-s   <间隔秒数>  持续观察内存使用状况。
-t  显示内存总和列。
-V  显示版本信息。
free 默认以k为单位显示
mem(total):内存总数;
mem(used):已经分配的内存;
并不是真正已用

mem(free):未分配的内存;
 并不是真正剩余内存

mem(buffers):系统分配但未被使用的buffers;
mem(cached)系统分配但未被使用的cache
buffers/cache(used):实际使用的buffers与cache
总量,也是实际使用的内存;

buffers/cache(free):未被使用的buffers与cache和未被分配的内存之和,这就是系统
 当前实际可用内存

buffers是即将要被写入磁盘的
cached是被从磁盘中读出来的

 

redhat7支持  free -h 

系统启动的时候就会从内存拿出一部分内存作为buffers和cached

 

 

netstat
netstat 查看网络状况 三次握手 四次挥手
输出分为两部分:一个是TCP/IP网络部分,另一个是Unix socket部分
Unix socket是本机内的进程间通信,而且连接非常多
-n :显示ip ,不显示机器名
netstat -lnp
查看当前系统开启的端口以及socket,所有ip,比如十个ip,十个ip都监听
netstat -an 查看当前系统所有的连接状态
netstat -lntp 只有tcp,不列出socket
netstat -lnup 只有udp,不列出socket
netstat -an|awk ‘/ESTABLISHED/’|wc -l 检查机器并发

 

 

zabbix监听端口:10050
mysql监听端口:3306
nginx监听端口:80
stmp sendmail监听端口:25

sendmail和postifx都可以发邮件

 

 

sar

sysstat软件包包含sar、iostat、mpstat三个命令,iostat的cpu统计和磁盘统计跟sar命令差不多
sar查看网络状态 跟vmstat用法差不多 1 10 每隔一秒打印,打印10次结束
没有这个命令,使用  yum install -y sysstat 
网卡流量  n:network  DEV device  sar -n
DEV ,  sar -n DEV 1 10 
读取指定文件数据,不加-f 默认显示今天凌晨到现在为止: sar -n DEV -f /var/log/sa/sa24  
查看历史负载  sar -q  ldavg 1分钟
5分钟 15分钟
查看磁盘读写  sar -b  bread/s bwrtn/s

图片 5

查看网络状态还有另外一个工具:iftop

记录文件需要开启sysstat服务:ls /etc/init.d/sysstat

 

 


查看cpu的个数和核数

cpu核数

cat /proc/cpuinfo
cat /proc/cpuinfo |grep ‘core id’
processor :线程数  逻辑核心数   从0开始算  ,衡量性能
core id:核心数  物理核心数 从0开始算

 

 

 cat
/proc/cpuinfo |grep processor
  //只有一个逻辑核
processor : 0

 # cat
/proc/cpuinfo |grep ‘core
id’
  //只有一个物理核
core id : 0


并发连接数不会超过65536  文件描述符 socket文件连接 最大65535
ulimit -n

 

# ulimit -a    //腾讯云
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14860
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 100001   //10W  关注
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14860     //  关注
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

 

ulimit -a    //家里centos6
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7764
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7764
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

 

 

楼方鑫HZ(37223884)  17:24:34
起动onecache前要设一下ulimit -n
ulimit -n 16384

 

概述

系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的

条件下保证程序的运作,ulimit
是我们在处理这些问题时,经常使用的一种简单手段。

ulimit 是一种
linux**
系统的内建功能,它具有一套参数集,用于为由它生成的
shell 进程及其子进程的资源使用设置限制**。

本文将在后面的章节中详细说明 ulimit
的功能,使用以及它的影响,并以具体的例子来详细地阐述它在限制资

源使用方面的影响。

 

 

ulimit 的功能和用法

ulimit 功能简述
假设有这样一种情况,当一台 Linux 主机上同时登陆了 10
个人,在系统资源无限制的情况下,
这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有
10M,这时系统的内存资源就
会受到巨大的挑战。

而实际应用的环境要比这种假设复杂的多,例如在一个嵌入式开发环境中,各方面的资源都是非常
紧缺的,对于开启文件描述符的数量,分配堆栈的大小,CPU
时间,虚拟内存大小,等等,都有非
常严格的要求。资源的合理限制和分配,不仅仅是保证系统可用性的必要条件,也与系统上软件运
行的性能有着密不可分的联系。这时,ulimit
可以起到很大的作用,它是一种简单并且有效的实现
资源限制的方式。

ulimit 用于限制 shell
所占用的资源,支持以下各种类型的限制:所创建的内核文件的大
小、进程数据块的大小、Shell
进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开
文件描述符的数量、分配堆栈的最大大小、CPU
时间、单个用户的最大线程数、Shell 进程所能使
用的最大虚拟内存。同时,它支持硬资源和软资源的限制。

作为临时限制,ulimit 可以作用于通过使用命令登录的 shell
会话,在会话终止时便结束限制,并

不影响于其他 shell
会话
。而对于长期的固定限制,ulimit
命令语句又可以被添加到由登录 shell 读

取的文件中,作用于特定的 shell
用户

 

ulimit
通过一些参数选项来管理不同种类的系统资源。在本节,我们将讲解这些参数的使用。

ulimit 命令的格式为:ulimit [options] [limit]
具体的 options 含义以及简单示例可以参考以下表格。

表 1. ulimit 参数说明
选项 [options]
含义
例子

-H
设置硬资源限制,一旦设置不能增加。
ulimit – Hs 64;限制硬资源,线程栈大小为 64K。

-S
设置软资源限制,设置后可以增加,但是不能超过硬资源设置。
ulimit – Sn 32;限制软资源,32 个文件描述符。

-a
显示当前所有的 limit 信息。
ulimit – a;显示当前所有的 limit 信息。

-c
最大的 core 文件的大小, 以 blocks 为单位。
ulimit – c unlimited; 对生成的 core 文件的大小不进行限制。

-d
进程最大的数据段的大小,以 Kbytes 为单位。
ulimit -d unlimited;对进程的数据段大小不进行限制。

-f
进程可以创建文件的最大值,以 blocks 为单位。
ulimit – f 2048;限制进程可以创建的最大文件大小为 2048 blocks。

-l
最大可加锁内存大小,以 Kbytes 为单位。
ulimit – l 32;限制最大可加锁内存大小为 32 Kbytes。

-m
最大内存大小,以 Kbytes 为单位。
ulimit – m unlimited;对最大内存不进行限制。

-n
可以打开最大文件描述符的数量。
ulimit – n 128;限制最大可以使用 128 个文件描述符。

-p
管道缓冲区的大小,以 Kbytes 为单位。
ulimit – p 512;限制管道缓冲区的大小为 512 Kbytes。

-s
线程栈大小,以 Kbytes 为单位。
ulimit – s 512;限制线程栈的大小为 512 Kbytes。

-t
最大的 CPU 占用时间,以秒为单位。
ulimit – t unlimited;对最大的 CPU 占用时间不进行限制。

-u
用户最大可用的进程数。
ulimit – u 64;限制用户最多可以使用 64 个进程。

-v
进程最大可用的虚拟内存,以 Kbytes 为单位。
ulimit – v 200000;限制最大可用的虚拟内存为 200000 Kbytes。

 

我们可以通过以下几种方式来使用 ulimit:

在用户的启动脚本中
如果用户使用的是 bash,就可以在用户的家目录下的 .bashrc 文件中,加入
ulimit – u 64,
来限制用户最多可以使用 64 个进程。此外,可以在与 .bashrc
功能相当的启动脚本中加入 ulimt。

 

 

在应用程序的启动脚本中
如果用户要对某个应用程序 myapp 进行限制,可以写一个简单的脚本
startmyapp。

用户进程的有效范围

ulimit
作为对资源使用限制的一种方式,是有其作用范围的。那么,它限制的对象是单个用户,单个
进程,还是整个系统呢?事实上,ulimit 限制的是当前 shell
进程以及其派生的子进程。举例来说,
如果用户同时运行了两个 shell 终端进程,只在其中一个环境中执行了 ulimit –
s 100,则该 shell
进程里创建文件的大小收到相应的限制,而同时另一个 shell
终端包括其上运行的子程序都不会受其影响:

Shell 进程 1

Shell 进程 2

 

 

ulimit 管理系统资源的例子

ulimit 提供了在 shell 进程中限制系统资源的功能。本章列举了一些使用
ulimit 对用户进
程进行限制的例子,详述了这些限制行为以及对应的影响,以此来说明 ulimit
如何对系统资源进行限制,从而达到调节系统性能的功能。

 

使用 ulimit 限制程序所能创建的 socket 数量

考虑一个现实中的实际需求。对于一个 C/S 模型中的 server
程序来说,它会为多个 client
程序请求创建多个 socket 端口给与响应。如果恰好有大量的 client 同时向
server 发出请
求,那么此时 server 就会需要创建大量的 socket
连接。但在一个系统当中,往往需要限制单
个 server 程序所能使用的最大 socket 数,以供其他的 server
程序所使用。那么我们如何
来做到这一点呢?答案是我们可以通过 ulimit
来实现!细心的读者可能会发现,通过前面章节的
介绍似乎没有限制 socket 使用的 ulimit 选项。是的,ulimit
并没有哪个选项直接说是用来
限制 socket 的数量的。但是,我们有 -n
这个选项,它是用于限制一个进程所能打开的文件描
述符的最大值。在 Linux
下一切资源皆文件,普通文件是文件,磁盘打印机是文件,socket 当
然也是文件。在 Linux 下创建一个新的 socket
连接,实际上就是创建一个新的文件描述符。如
下图所示(查看某个进程当前打开的文件描述符信息):

图片 6

因此,我们可以通过使用 ulimit –
n
来限制程序所能打开的最大文件描述符数量,从而
达到限制 socket 创建的数量。

 

 

每当一个新的线程被创建时都需要新分配一段大小为 1232KB (1MB)的内存空间

 

问题描述:

生产环境发现CPU满负荷运行,MongoDB的连接数始终突破不了1000。

解决方案:

1、查看mongodb的日志,报下面的错误:
Wed Nov 21 15:26:09 [initandlisten] pthread_create failed: errno:11
Resource temporarily unavailable   
Wed Nov 21 15:26:09 [initandlisten] can’t create new thread, closing
connection

2、在一台一样的centos5的机器上测试,发现连接2000个连接一点问题都没有。  
3、上google查找问题,关键字“mongod.conf can’t create new thread, closing
connection”    
4、找到问题所在,原来centos6与之前centos5不同,多了一个默认的限制用户nproc的配置文件
:/etc/security/limits.d/90-nproc.conf
,默认把普通用户的nproc设置成1024,而mongodb正好又是使用mongod这个非root用户跑的,所以连接数一直上不去了。 
  
5、更改/etc/security/limits.d/90-nproc.conf ,把1024改成20480
,问题解决。 

代码:

[root@test ~]# cat /etc/security/limits.d/90-nproc.conf    # Default limit for number of user's processes to prevent    # accidental fork bombs.    # See rhbz #432903 for reasoning.*          soft    nproc     20480

#注意,root用户不受nproc限制

 

 

打开文件句柄数和最大用户进程数限制:

在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many
files的问题;这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用其实很容易就达到这个数量。下面说的是,如何通过正解配置来改正这个系统默认值。

查看方法

我们可以用ulimit -a来查看所有限制值

复制内容到剪贴板

代码:

[root@test ~]# ulimit -a    core file size          (blocks, -c) 0    data seg size           (kbytes, -d) unlimited    scheduling priority             (-e) 0    file size               (blocks, -f) unlimited    pending signals                 (-i) 256469    max locked memory       (kbytes, -l) 64    max memory size         (kbytes, -m) unlimited    open files                      (-n) 64000    pipe size            (512 bytes, -p) 8    POSIX message queues     (bytes, -q) 819200    real-time priority              (-r) 0    stack size              (kbytes, -s) 10240    cpu time               (seconds, -t) unlimited    max user processes              (-u) 65536    virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

其中 “open files
(-n)”是Linux操作系统对一个进程打开的文件句柄数量的限制,默认是1024。  
(也包含打开的SOCKET数量,可影响数据库的并发连接数目)。

正确的做法,应该是修改/etc/security/limits.conf  
里面有很详细的注释,比如    
hadoop  soft   nofile   32768    
hadoop hard nofile 65536

hadoop soft   nproc   32768  
hadoop hard nproc 65536

  
就可以将文件句柄限制统一改成软32768,硬65536。配置文件最前面的是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制。

注意:这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning;其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软

默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变。

RHE6及以后 nproc的修改在/etc/security/limits.d/90-nproc.conf中

 

 

如何修改连接数限制:

临时修改(当前shell下更改用户可打开进程数):

复制内容到剪贴板

代码:

# ulimit -u xxx

永久修改,
保险的做法是同时修改/etc/security/limits.d/90-nproc.conf 和
/etc/security/limits.conf如下:

limits_conf = /etc/security/limits.conf: 
*   soft   nproc    s1    
*   hard   nproc    h1

nproc_conf = /etc/security/limits.d/90-nproc.conf:  
*   soft    nproc    s2    
*   hard    nproc    h2

s1,h1,s2,h2必须是具体有意义的数. 此时ulimit -u显示的值为=min(h1,h2)

因此通常就设置s1=s2=h1=h2,
例如在limits_conf和nproc_conf中同时加入:  
*   soft   nproc   65536    
*   hard   nproc   65536

 

 limits.conf的格式如下:
username|@groupname type resource limit

username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。

type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard
表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 –
就表明同时设置了 soft 和 hard 的值。

resource:
core – 限制内核文件的大小
date – 最大数据大小
fsize – 最大文件大小
memlock – 最大锁定内存地址空间
nofile – 打开文件的最大数目
rss – 最大持久设置大小
stack – 最大栈大小
cpu – 以分钟为单位的最多 CPU 时间
noproc – 进程的最大数目
as – 地址空间限制
maxlogins – 此用户允许登录的最大数目

要使 limits.conf 文件配置生效,必须要确保 pam_limits.so
文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:
session required /lib/security/pam_limits.so

暂时地,适用于通过 ulimit 命令登录 shell 会话期间。
永久地,通过将一个相应的 ulimit 语句添加到由登录 shell
读取的文件之一(例如 ~/.profile),即特定于 shell
的用户资源文件;或者通过编辑 /etc/security/limits.conf。
   
何谓core文件,当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。 
core文件是个二进制文件,需要用相应的工具来分析程序崩溃时的内存映像。
 
系统默认core文件的大小为0,所以没有创建。可以用ulimit命令查看和修改core文件的大小。
$ulimit -c
0
$ ulimit -c 1000
$ ulimit -c
1000
-c
指定修改core文件的大小,1000指定了core文件大小。也可以对core文件的大小不做限制,如:
# ulimit -c unlimited
#ulimit -c
unlimited
如果想让修改永久生效,则需要修改配置文件,如
.bash_profile、/etc/profile或/etc/security/limits.conf。
 2.nofile – 打开文件的最大数目
对于需要做许多套接字连接并使它们处于打开状态的应用程序而言,最好通过使用
ulimit –n,或者通过设置nofile
参数,为用户把文件描述符的数量设置得比默认值高一些
 
 
用ulimit -n 2048 修改只对当前的shell有效,退出后失效:
如A程序已经运行,此时ulimit -n为1024;之后ulimit -n
2048,这时在运行B程序;退出当前shell用户,再次进行shell,之后运行C程序;这时只有B程序用的是2048,其它用的都是1024


 

lsof命令

 

在终端下输入lsof即可显示系统打开的文件,因为 lsof
需要访问核心内存和各种文件,所以必须以 root
用户的身份运行它才能够充分地发挥其功能

各列解释

每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件

lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

 

 

选项

lsof  filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string   显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username  显示所属user进程打开的文件
lsof -g gid 显示所属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/
同上,但是会递归搜索,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -p  <pid>  查看指定进程打开的文件
lsof -i[46] [protocol][@hostname|@hostaddr][:service|port]
            46 –> IPv4 or IPv6
            protocol –> TCP or UDP
            hostname –> Internet host name
            hostaddr –> IPv4地址
            service –> /etc/services 中的 service name
(可以不只一个)
            port –> 端口号 (可以不只一个)

 

lsof |grep deleted
,显示文件系统中已经被删除的文件但是因为被引用所以还无法删除
lsof -i:36000,显示使用36000端口的进程
lsof -u root,显示以root运行的程序
lsof -c php-fpm,显示php-fpm进程打开的文件
lsof php.ini,显示打开php.ini这个文件的进程。

 

lsof -i :873|grep -v "PID"|awk '{print "kil -9",$2}'|sh
grep -v "PID":去除行头

 

# lsof -i 4  查看IPv4类型的进程
COMMAND    PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4     2213 Debian-exim    4u  IPv4   4844       TCP *:smtp
(LISTEN)
dhclient3 2306        root    4u  IPv4   4555       UDP *:bootpc

# lsof -i 6  查看IPv6类型的进程
COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2213 Debian-exim    3u  IPv6   4820       TCP *:smtp (LISTEN)

# lsof -i @192.168.1.2  查看与某个具体的IP相关联的进程
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
amule   3620 root   16u  IPv4  11925       TCP
192.168.1.2:42556->77.247.178.244:4242 (ESTABLISHED)
amule   3620 root   28u  IPv4  11952       TCP
192.168.1.2:49915->118-166-47-24.dynamic.hinet.net:5140
(ESTABLISHED)

# lsof -i:873  根据进程号查看进程对应的可执行程序
COMMAND PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
rsync   702 root    4u  IPv4 3792149      0t0  TCP *:rsync (LISTEN)

lsof -p 702  根据进程号查看进程对应的可执行程序
# lsof -p 702
COMMAND PID USER   FD   TYPE  DEVICE SIZE/OFF   NODE NAME
rsync   702 root  cwd    DIR   252,1     4096 311297 /root
rsync   702 root  rtd    DIR   252,1     4096      2 /
rsync   702 root  txt    REG   252,1   410536 240090 /usr/bin/rsync
rsync   702 root  mem    REG   252,1    18712 147514
/lib64/libattr.so.1.1.0
rsync   702 root  mem    REG   252,1   154528 147463 /lib64/ld-2.12.so
rsync   702 root    0u   CHR    
1,3      0t0   3787 /dev/null  前三个文件描述符  标准输入 标准输出
标准错误 第四个开始文件描述符

rsync   702 root    1u   CHR    
1,3      0t0   3787 /dev/null

rsync   702 root    2u   CHR    
1,3      0t0   3787 /dev/null

rsync   702 root    4u  IPv4 3792149      0t0    TCP *:rsync (LISTEN)

# lsof /usr/bin/rsync
COMMAND PID USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsync   702 root txt    REG  252,1   410536 240090 /usr/bin/rsync

 

# lsof -u steven
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 19640 steven cwd DIR 252,1 4096 2 /
sshd 19640 steven rtd DIR 252,1 4096 2 /
sshd 19640 steven txt REG 252,1 567128 239837 /usr/sbin/sshd
sshd 19640 steven DEL REG 0,4 6892665 /dev/zero
sshd 19640 steven mem REG 252,1 18600 147602
/lib64/security/pam_limits.so

# lsof -c rsync
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 702 root cwd DIR 252,1 4096 311297 /root
rsync 702 root rtd DIR 252,1 4096 2 /
rsync 702 root txt REG 252,1 410536 240090 /usr/bin/rsync
rsync 702 root mem REG 252,1 18712 147514 /lib64/libattr.so.1.1.0
rsync 702 root mem REG 252,1 1921176 147470 /lib64/libc-2.12.so
rsync 702 root 0u CHR 1,3 0t0 3787 /dev/null
rsync 702 root 4u IPv4 3792149 0t0 TCP *:rsync (LISTEN)

 

 

lsof简介

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

lsof使用
lsof输出信息含义

在终端下输入lsof即可显示系统打开的文件,因为 lsof
需要访问核心内存和各种文件,所以必须以 root
用户的身份运行它才能够充分地发挥其功能。

COMMAND    PID      USER   FD      TYPE     DEVICE     SIZE      
NODE      NAME
init       1         root  cwd      DIR       3,3       1024      
2         /
init       1         root  rtd      DIR       3,3       1024      
2         /
init       1         root  txt      REG       3,3       38432     
1763452  /sbin/init
init       1         root  mem      REG       3,3       106114    
1091620  /lib/libdl-2.6.so
init       1         root  mem      REG       3,3       7560696   
1091614  /lib/libc-2.6.so
init       1         root  mem      REG       3,3       79460     
1091669  /lib/libselinux.so.1
init       1         root  mem      REG       3,3       223280    
1091668  /lib/libsepol.so.1
init       1         root  mem      REG       3,3       564136    
1091607  /lib/ld-2.6.so
init       1         root  10u      FIFO      0,15                 
1309     /dev/initctl

每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。lsof输出各列信息的意义如下:

COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识) 文件inode
NAME:打开文件的确切路径

FD 列表示文件描述符
cwd
表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。

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

u
表示该其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,
其文件描述符为 10。
文件被打开并处于读取/写入模式,而不是只读或只写模式。同时还有大写的W表示该应用程序具有对整个文件的写锁。
该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都具有三个文件描述符,
从 0 到
2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD
都是从 3 开始。

Type 列表示文件类型
文件和目录分别称为 REG 和 DIR
CHR 和 BLK,分别表示字符和块设备
UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO)
队列和网络协议 (IP) 套接字

lsof常用参数
lsof
常见的用法是查找应用程序打开的文件的名称和数目。可用于查找出某个特定应用程序将日志数据记录到何处,或者正在跟踪某个问题。
例如,linux限制了进程能够打开文件的数目。通常这个数值很大,所以不会产生问题,并且在需要时,应用程序可以请求更大的值(直到某
个上限)。如果你怀疑应用程序耗尽了文件描述符,那么可以使用 lsof
统计打开的文件数目,以进行验证。lsof语法格式是:

lsof [options] filename

常用的参数列表:
lsof  filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string   显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username  显示所属user进程打开的文件
lsof -g gid 显示所属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/
同上,但是会递归搜索,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -p  <pid>  查看指定进程打开的文件
lsof -i[46] [protocol][@hostname|@hostaddr][:service|port]
            46 –> IPv4 or IPv6
            protocol –> TCP or UDP
            hostname –> Internet host name
            hostaddr –> IPv4地址
            service –> /etc/services 中的 service name
(可以不只一个)
            port –> 端口号 (可以不只一个)

            
            
lsof使用实例

一、查找谁在使用文件系统

在卸载文件系统时,如果该文件系统中有任何打开的文件,操作通常将会失败。那么通过lsof可以找出那些进程在使用当前要卸载的文件系统,如下:

# lsof  /GTES11/
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
bash    4208 root  cwd    DIR    3,1 4096    2 /GTES11/
vim     4230 root  cwd    DIR    3,1 4096    2 /GTES11/

二、恢复删除的文件
当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。
有时可以通过lsof来恢复这些文件。
当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以像打开该文件时提供给它的文件描述符进行读取和写入。
除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点inode。

在/proc
目录下,其中包含了反映内核和进程树的各种文件。/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与
lsof 相关的信息都存储于以进程的 PID 命名的目录中,即 /proc/1234
中包含的是 PID 为 1234
的进程的信息。每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。lsof
程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以lsof
可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。
ll /proc/8775/exe
lrwxrwxrwx 1 root root 0 Mar 29 19:02 /proc/8775/exe ->
/usr/sbin/sshd

当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过lsof从/proc目录下恢复该文件的内容。
假如由于误操作将/var/log/messages文件删除掉了,那么这时要将/var/log/messages文件恢复的方法如下:

首先使用lsof来查看当前是否有进程打开/var/logmessages文件,如下:
# lsof |grep /var/log/messages
syslogd   1283      root    2w      REG        3,3  5381017    1773647
/var/log/messages (deleted)

从上面的信息可以看到 PID 1283(syslogd)打开文件的文件描述符为
2。同时还可以看到/var/log/messages已经标记被删除了。因此我们可以在
/proc/1283/fd/2
(fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下:

# head -n 10 /proc/1283/fd/2
Aug  4 13:50:15 holmes86 syslogd 1.4.1: restart.
Aug  4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg
started.
Aug  4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8
(root@everestbuilder.linux-ren.org) (gcc version 4.2.0) #1 SMP Wed Jul
18 11:18:32 EDT 2007
Aug  4 13:50:15 holmes86 kernel: BIOS-provided physical RAM map:
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 0000000000000000 –
000000000009f000 (usable)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 000000000009f000 –
00000000000a0000 (reserved)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 0000000000100000 –
000000001f7d3800 (usable)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 000000001f7d3800 –
0000000020000000 (reserved)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 00000000e0000000 –
00000000f0007000 (reserved)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 00000000f0008000 –
00000000f000c000 (reserved)

如果可以通过文件描述符查看相应的数据,那么就可以使用 I/O
重定向将其复制到文件中,如:
cat /proc/1283/fd/2 > /var/log/messages

对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用

 

查找误删文件具体步骤

比如查找/var/log/messages

1、使用lsof查看/var/log下面的文件所用的文件描述符
lsof +D /var/log
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
auditd    1138   root    5w   REG  253,0   724625 1312257
/var/log/audit/audit.log
rsyslogd  1168   root    1w   REG 
253,0     1111 1312269 /var/log/messages

rsyslogd  1168   root    2w   REG  253,0    55962 1312253
/var/log/cron
rsyslogd  1168   root    4w   REG  253,0     1763 1312270
/var/log/secure
mcelog    1493   root    3w   REG  253,0        0 1312155
/var/log/mcelog
zabbix_ag 2054 zabbix    1w   REG  253,0   263546 1312233
/var/log/zabbix/zabbix_agentd.log
zabbix_ag 2054 zabbix    2w   REG  253,0   263546 1312233
/var/log/zabbix/zabbix_agentd.log
zabbix_ag 2058 zabbix    1w   REG  253,0   263546 1312233
/var/log/zabbix/zabbix_agentd.log
zabbix_ag 2058 zabbix    2w   REG  253,0   263546 1312233
/var/log/zabbix/zabbix_agentd.log

2、找到使用/var/log/messages的进程的pid
,和/var/log/messages所使用的文件描述符次数  这里次数为1
ll /proc/1168/fd
total 0
lrwx—— 1 root root 64 Mar 25 11:00 0 -> socket:[10156]
l-wx—— 1 root root 64 Mar 25 11:00 1
-> /var/log/messages

l-wx—— 1 root root 64 Mar 30 10:24 2 -> /var/log/cron
lr-x—— 1 root root 64 Mar 25 11:00 3 -> /proc/kmsg
l-wx—— 1 root root 64 Mar 30 10:24 4 -> /var/log/secure

3、cat一下文件描述符为1的文件
cat /proc/1168/fd/1
Mar 28 10:37:01 steven rsyslogd: [origin software=”rsyslogd”
swVersion=”5.8.10″ x-pid=”1168″ x-info=”]
rsyslogd was HUPed
Mar 28 11:49:21 steven fail2ban.filter[2075]: INFO Log rotation
detected for /var/log/secure
Mar 28 12:40:12 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 12:40:22 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 28 13:36:27 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 13:36:38 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 28 18:24:48 steven yum[4880]: Installed:
sysstat-9.0.4-27.el6.x86_64
Mar 28 19:13:41 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 19:13:53 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 29 12:34:14 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 12:34:23 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 29 19:01:57 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 19:02:09 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None

4、进行比较,发现确实是一样的
at /var/log/messages
Mar 28 10:37:01 steven rsyslogd: [origin software=”rsyslogd”
swVersion=”5.8.10″ x-pid=”1168″ x-info=”]
rsyslogd was HUPed
Mar 28 11:49:21 steven fail2ban.filter[2075]: INFO Log rotation
detected for /var/log/secure
Mar 28 12:40:12 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 12:40:22 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 28 13:36:27 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 13:36:38 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 28 18:24:48 steven yum[4880]: Installed:
sysstat-9.0.4-27.el6.x86_64
Mar 28 19:13:41 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 19:13:53 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 29 12:34:14 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 12:34:23 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 29 19:01:57 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 19:02:09 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None

5、备份下来
cat /proc/1168/fd/1> /var/log/messages


pidof命令

 

pidof  进程名

 

21852是libvirtd  进程的进程号

[root@gz]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign
Address             State       PID/Program name   
tcp        0      0 0.0.0.0:5905               
0.0.0.0:*                   LISTEN      21945/qemu-kvm      
tcp        0      0 0.0.0.0:16509              
0.0.0.0:*                   LISTEN      21852/libvirtd      
tcp        0      0 0.0.0.0:9022               
0.0.0.0:*                   LISTEN      1150/sshd           
tcp        0      0 127.0.0.1:8000             
0.0.0.0:*                   LISTEN      1173/python         
tcp        0      0 0.0.0.0:6080               
0.0.0.0:*                   LISTEN      1171/python         
tcp        0      0 0.0.0.0:5903               
0.0.0.0:*                   LISTEN      21977/qemu-kvm      
tcp        0      0 :::9022                    
:::*                        LISTEN      1150/sshd           

[root@gzy1]# pidof libvirtd
21852

 

f