linux进程管理

linux系统进程查看及管理工具

对于服务器来说重要的IO 设备
磁盘
网络

pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup,nice,renice,killall…..

pstree命令:

pstree-display a tree of processes
-p 显示进程树进程的pid

[root@localhost ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─abrt-watch-log
        ├─abrtd
        ├─alsactl
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ├─bluetoothd
        ├─chronyd
        ├─crond
        ├─cupsd
        ├─dbus-daemon
        ├─gssproxy───5*[{gssproxy}]
        ├─login───bash
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───5*[{polkitd}]
        ├─rngd
        ├─rsyslogd───2*[{rsyslogd}]
        ├─smartd
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─wpa_supplicant

ps

给当前系统进程做一个快照。直显示命令执行那一刻的状态。

/proc/:内核中的状态信息
    内核参数:
        可设置其值从而调整内核运行特征的参数
        状态变量:其用于输出内核中统计信息或状态信息,仅用于参看。
参数:模拟成文件系统类型;

进程:
    /proc/
        都有一个与其进程号相同的目录。

进程启动的方式
    系统奇多过程中自动启动:与终端无关的进程
    用户通过终端启动:无终端相关的进程

ps有三种风格的选项
有必须带-
有的必须不能带-
有的必须–

常用方式

a与终端相关的进程
x与终端无关的进程
u与用户相关的进程

o 指定要显示的内容

[ ] 内核启动的线程

USER PID %CPU %MEM   VSZ  RSS TTY  STAT START  TIME COMMAND

VSZ: Virtual memory SiZe,虚拟内存集,线性内存
RSS: ReSidentSize, 常驻内存集
STAT:进程状态
    R:running
    S: interruptables leeping    可中断的
    D: uninterruptable sleeping  不可中断的
    T: stopped
    Z: zombie
    +: 前台进程
    l: 多线程进程
    N:低优先级进程
    <: 高优先级进程
    s: session leader,会话(子进程)发起者
TIME:该进程累计占用cpu的时间

pgrep/pkill

进程搜索

按预定义的模式:pgrep
    pgrep[options] patter
        -u uid: effective user,生效者
        -U uid: real user,真正发起运行命令者
        -t terminal: 与指定终端相关的进程
        -l: 显示进程名
        -a: 显示完整格式的进程名
        -P pid: 显示父进程为此处指定的进程的进程列表
    pgrep -t pts/0 l
    显示pts/0终端运行的进程, l 显示进程名称
    pgrep -t pts/0 -a 
    显示的更详细,命令的参数都显示出来。

    pgrep -P 24944 -a
    24979 passwd
    显示24944的子进程,pid是24979 名称 passwd

pidof
/sbin/pidof
按确切的程序名称:

$ pidof bash
显示系统中运行的bash进程。例如开其了多个终端,就会有多个进程。

系统工具

uptime
    显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、15分钟的平均负载,一般不会超过1)
    系统平均负载:
    指在特定时间间隔内运行队列中的平均进程数。
    如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。
    如果linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。

[root@localhost]# uptime -p
up 6 hours, 48 minutes

进程管理工具

top
实时跟踪,动态先显示内存cpu情况

top - 23:53:18 up  7:33,  3 users,  load average: 0.05, 0.06, 0.06             ##相当于uptime
Tasks: 364 total,   2 running, 362 sleeping,   0 stopped,   0 zombie        ##进程信息
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st###cpu信息
KiB Mem :  1001332 total,   113420 free,   168424 used,   719488 buff/cache        ##内存信息
KiB Swap:  2098172 total,  2098172 free,        0 used.   611316 avail Mem         ##内存信息

上面的信息可以关闭显示。

top:有许多内置命令:
    排序:
        P:以占据的CPU百分比,%CPU
        M:占据内存百分比,%MEM
        T:累积占据CPU时长,TIME+
        首部信息显示:
    uptime信息:l命令
    tasks及cpu信息:t命令 centos7切换显示方式或关闭。
    cpu分别显示:1 (数字)
    memory信息:m命令
    退出命令:q
    修改刷新时间间隔:s 默认是三秒  不建议刷新间隔太小,会给系统改造成负担
    终止指定进程:k 
        centos7会给出个默认的pid cup使用率最高的。可以手动指定pid
        选择pid 然后 Kill PID 1684 with signal [15]:默认发送15号信号。
    保存文件:W
        存到用户的家目录下 默认名字 .toprc

执行top后 输入上面相应指令集可以操作。

栏位信息简介
    us:用户空间
    sy:内核空间
    ni:调整nice时间
    id:空闲
    wa:等待IO时间
    hi:硬中断
    si:软中断(模式切换)
    st:虚拟机偷走的时间
    PID (Process Id):任务的进程IDPPID (Parent Process Pid):父任务的进程IDRUSER (Real User Name):任务的所有者真实名称UID (User Id):任务所有者IDUSER (User Name):任务所有者名称GROUP (Group Name):任务所有者群组名TTY (Controlling Tty):终端PR (Priority):优先级%CPU (CPU usage):CPU使用率
    %MEM (Memory usage (RES)):内存使用率
    S (Process Status):进程状态
    TIME+ (CPU Time, hundredths):CPU时间,精确到秒

top [OPENTION]
    -d #: 指定刷新时间间隔,默认为3秒
    -b: 以批次方式 一般情况屏幕显示不全,-b 一屏的往下翻,循环。
    -n #: 显示多少批次 刷新次数完毕退出,默认是一直刷新,但是时间间隔可以指定-d。
    -p cpu使用率排序 (默认)

top -d 5 -n 3
    每隔5秒刷新一次,刷新3次

htop命令:需从Fedora-EPEL源安装

默认带菜单,带颜色。f1-f10快捷键

http://172.16.0.1/fedora-epel/7/x86_64
选项:
    -d #: 指定延迟时间;
    -u UserName: 仅显示指定用户的进程;
    -s COLUME: 以指定字段进行排序;

子命令:执行htop以后执行的子命令
    s: 跟踪选定进程的系统调用;
    l: 显示选定进程打开的文件列表;
    a:将选定的进程绑定至某指定CPU核心;
    t: 显示进程树

内存工具

vmstat命令:虚拟内存信息
    vmstat[options] [delay [count]]
    vmstat 2 5
        2秒刷新一次,刷新5次

默认刷新一次
[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0      8 126136   1596 711028    0    0    13    16   37   40  0  0 99  0  0
显示完毕就退出

显示内容

    procs:
        r:等待运行的进程的个数,和核心数有关
        b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
    memory:
        swpd: 交换内存的使用总量
        free:空闲物理内存总量
        buffer:用于buffer的内存总量
        cache:用于cache的内存总量
    swap:
        si:从磁盘交换进内存的数据速率(kb/s)
        so:从内存交换至磁盘的数据速率(kb/s)
    io:
        bi:从块设备读入数据到系统的速率;(kb/s)
        bo: 保存数据至块设备的速率;
    system:
        in: interrupts, 中断速率,包括时钟
        cs: context switch, 进程切换速率
    cpu:
        us:Timespent running non-kernel code.
        sy: Time spent running kernel code
        id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
        wa: Time spent waiting for IO. 2.5.41前,包括in idle.
        st: Time stolen from a virtual machine. 2.6.11前, unknown.
选项:
    -s: 显示内存的统计数据

    [root@localhost ~]# vmstat -s
          1001332 K total memory
           162076 K used memory
           316484 K active memory
           236640 K inactive memory
           126664 K free memory
             1596 K buffer memory
           710996 K swap cache
          2098172 K total swap
                8 K used swap
          2098164 K free swap
             4521 non-nice user cpu ticks
              695 nice user cpu ticks
            10009 system cpu ticks
          2950649 idle cpu ticks
             3636 IO-wait cpu ticks
                0 IRQ cpu ticks
              160 softirq cpu ticks
                0 stolen cpu ticks
           371505 pages paged in
           458693 pages paged out
                0 pages swapped in
                2 pages swapped out
          1086138 interrupts
          1188701 CPU context switches
       1471940397 boot time
            47448 forks

pmap

pmap命令:进程的内存映射
report memory map of a process
pmap[options] pid[...]
    -x: 显示详细格式的信息;
    #pmap 1
另外一种实现:
    # cat /proc/PID/maps

    pmap PID -x
    [root@localhost ~]# pmap 47188 -x
    47188:   -bash
    Address           Kbytes     RSS   Dirty Mode  Mapping
    0000000000400000     884     648       0 r-x-- bash
    00000000006dc000       4       4       4 r---- bash
    00000000006dd000      36      36      36 rw--- bash
    00000000006e6000      24      24      24 rw---   [ anon ]
    0000000001f1b000    1456    1328    1328 rw---   [ anon ]
    00007f1d2f25f000  103580      52       0 r---- locale-archive
    00007f1d35786000      44      20       0 r-x-- libnss_files-2.17.so
    00007f1d35791000    2044       0       0 ----- libnss_files-2.17.so
    00007f1d35990000       4       4       4 r---- libnss_files-2.17.so
    00007f1d35991000       4       4       4 rw--- libnss_files-2.17.so
    00007f1d35992000      24       0       0 rw---   [ anon ]
    00007f1d35998000    1752     660       0 r-x-- libc-2.17.so
    00007f1d35b4e000    2048       0       0 ----- libc-2.17.so
    00007f1d35d4e000      16      16      16 r---- libc-2.17.so
    00007f1d35d52000       8       8       8 rw--- libc-2.17.so
    00007f1d35d54000      20      20      20 rw---   [ anon ]
    00007f1d35d59000      12       8       0 r-x-- libdl-2.17.so
    00007f1d35d5c000    2044       0       0 ----- libdl-2.17.so
    00007f1d35f5b000       4       4       4 r---- libdl-2.17.so
    00007f1d35f5c000       4       4       4 rw--- libdl-2.17.so
    00007f1d35f5d000     148     124       0 r-x-- libtinfo.so.5.9
    00007f1d35f82000    2048       0       0 ----- libtinfo.so.5.9
    00007f1d36182000      16      16      16 r---- libtinfo.so.5.9
    00007f1d36186000       4       4       4 rw--- libtinfo.so.5.9
    00007f1d36187000     132     116       0 r-x-- ld-2.17.so
    00007f1d3638f000      12      12      12 rw---   [ anon ]
    00007f1d3639e000       4       4       4 rw---   [ anon ]
    00007f1d3639f000      28      24       0 r--s- gconv-modules.cache
    00007f1d363a6000       8       8       8 rw---   [ anon ]
    00007f1d363a8000       4       4       4 r---- ld-2.17.so
    00007f1d363a9000       4       4       4 rw--- ld-2.17.so
    00007f1d363aa000       4       4       4 rw---   [ anon ]
    00007fff60224000     132      24      24 rw---   [ stack ]
    00007fff602a7000       8       4       0 r-x--   [ anon ]
    ffffffffff600000       4       0       0 r-x--   [ anon ]
    ---------------- ------- ------- ------- 
    total kB          116596    3188    1532

系统监控工具

glances

glances命令:EPEL源
交直观的现实系统状态,cpu 内存 进程 文件系统 网络 等状态
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]
内建命令:
    a Sort processes automatically l Show/hide logs
    c Sort processes by CPU% b Bytes or bits for network I/O
    m Sort processes by MEM% w Delete warning logs
    p Sort processes by name x Delete warning and critical logs
    iSort processes by I/O rate 1 Global CPU or per-CPU stats
    d Show/hide disk I/O stats h Show/hide this help screen
    f Show/hide file system stats t View network I/O as combination
    n Show/hide network stats u View cumulative network I/O
    s Show/hide sensors stats q Quit (Esc and Ctrl-C also work)
    y Show/hide hddtempstats


常用选项:
    -b: 以Byte为单位显示网卡数据速率
    -d: 关闭磁盘I/O模块
    -f /path/to/somefile: 设定输入文件位置
    -o {HTML|CSV}:输出格式
    -m: 禁用mount模块
    -n: 禁用网络模块
    -t #: 延迟时间间隔
    -1:每个CPU的相关数据单独显示

C/S模式下运行glances命令
服务模式:
    glances -s -B IPADDR
    IPADDR: 指明监听的本机哪个地址
客户端模式:
    glances -c IPADDR
    IPADDR:要连入的服务器端地址

dstat

dstat命令:系统资源统计
dstat[-afv] [options..] [delay [count]]
    -c: 显示cpu相关信息
    -C #,#,...,total
    -d: 显示disk相关信息
    -D total,sda,sdb,...
    -g:显示page相关统计数据
    -m: 显示memory相关统计数据
    -n: 显示network相关统计数据
    -p: 显示process相关统计数据
    -r: 显示io请求相关的统计数据
    -s: 显示swapped相关的统计数据

--tcp
--udp
--unix
--raw
--socket
--ipc
--top-cpu:显示最占用CPU的进程
--top-io: 显示最占用io的进程
--top-mem: 显示最占用内存的进程
--top-latency: 显示延迟最大的进程


   PLUGINS
   While anyone can create their own dstat plugins (and contribute them) dstat ships with a number of plugins already that extend its capabilities greatly.
   Here is an overview of the plugins dstat ships with:
    电源 风扇 mysql wifi 报文 网络 磁盘 cpu........

进程管理工具

kill

kill命令:

    向进程发送控制信号,以实现对进程管理

    显示当前系统可用信号:kill -l
    常用信号:man 7 signal
        1) SIGHUP: 无须关闭进程而让其重读配置文件 
                systemctl reload SERVICENAME 等同于SIGHUP
        2) SIGINT: 中止正在运行的进程;相当于Ctrl+c
        9) SIGKILL: 杀死正在运行的进程
            不管进程处于何种操作,强行中断并杀死。
        15) SIGTERM:终止正在运行的进程(默认选项),通常是个后台进程。
            等待进程自己结束必要操作后,杀死进程。
        18) SIGCONT:
                    继续 有些程序放到后台还是会自己运行的例如cp(不是停止状态)。
        19) SIGSTOP:
                    停止,打开vim后 ctrl + z将vim送到后台。 该进程就处于停止状态。


    打开vim后 ctrl + z将vim送到后台。 该进程就处于停止状态
    fg 将其送回前台继续运行。


    指定信号的方法:
        (1) 信号的数字标识;1, 2, 9
        (2) 信号完整名称;SIGHUP
        (3) 信号的简写名称;HUP

    按PID:kill [-SIGNAL] pid…

    按名称:kill all[-SIGNAL] comm…
        killall httpd

    按模式:pkill[options] pattern
        -SIGNAL
        -u uid: effective user,生效者
        -U uid: real user,真正发起运行命令者
        -t terminal: 与指定终端相关的进程
        -l: 显示进程名
        -a: 显示完整格式的进程名
        -P pid: 显示父进程为此处指定的进程的进程列表

原创文章,作者:yyw,如若转载,请注明出处:http://www.178linux.com/44962