• 自学Linux Shell4.1-监测程序ps top kill


    点击返回 自学Linux命令行与Shell脚本之路

    4.1-监测程序ps top kill

    1. PS命令

    linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。

    ps的3种不同类型的命令行参数

    • UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符(主要此风格)
    • BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符  
    • GNU 风格的长选项,选项前有两个“-”连字符  

    ps参数:

    • -A    列出所有的进程
    • -w    显示加宽可以显示较多的资讯
    • -au    显示较详细的资讯
    • -aux    显示所有包含其他使用者的行程
    • -a 显示一个终端的所有进程,除了会话引线
    • -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 ax        查看不与terminal有关的所有进程  
    • ps -lA        查看系统所有的进程数据  
    • ps axjf      查看连同一部分进程树状态  

    • USER    用户名
    • UID    用户ID(User ID)
    • PID    进程ID(Process ID)
    • %CPU    进程的cpu占用率
    • %MEM    进程的内存占用率
    • VSZ    进程所使用的虚存的大小(Virtual Size)
    • RSS    进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。
    • TTY    与进程关联的终端(tty)
    • STAT    进程的状态:进程状态使用字符表示的(STAT的状态码)
      R 运行    Runnable (on run queue)            正在运行或在运行队列中等待。
      S 睡眠    Sleeping                休眠中, 受阻, 在等待某个条件的形成或接受到信号。
      I 空闲    Idle
      Z 僵死    Zombie(a defunct process)        进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
      D 不可中断    Uninterruptible sleep (ususally IO)    收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
      T 终止    Terminate                进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
      P 等待交换页
      W 无驻留页    has no resident pages     没有足够的记忆体分页可分配。
      X 死掉的进程
      < 高优先级进程                  高优先序的进程
      N 低优先    级进程              低优先序的进程
      L 内存锁页    Lock               有记忆体分页分配并缩在记忆体内
      s 进程的领导者(在它之下有子进程);
      l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
      + 位于后台的进程组 
    • START    进程启动时间和日期
    • TIME    进程使用的总cpu时间
    • COMMAND    正在执行的命令行命令

     ps -l

    • F 内核分配给进程的系统标记
    • S 进程的状态
    • PPID 父进程的进程号
    • NI    优先级(Nice)
    • PRI    进程优先级编号(Priority)
    • ADDR 进程的内存地址
    • SZ  假如进程被换出,所需交换空间的大致大小
    • WCHAN    进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。

     ps -ef  参数组合使用

     

    2. top命令

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。

    top命令的结果分为两个部分:

    • 统计信息:前五行是系统整体的统计信息;
    • 进程信息:统计信息下方类似表格区域显示的是各个进程的详细信息,默认5秒刷新一次。

    统计信息说明:

      • 第1行:Top 任务队列信息(系统运行状态及平均负载),与uptime命令结果相同。 
        • 第1段:系统当前时间,例如:16:07:37
        • 第2段:系统运行时间,未重启的时间,时间越长系统越稳定。 
          • 格式:up xx days, HH:MM
          • 例如:241 days, 20:11, 表示连续运行了241天20小时11分钟
        • 第3段:当前登录用户数,例如:1 user,表示当前只有1个用户登录
        • 第4段:系统负载,即任务队列的平均长度,3个数值分别统计最近1,5,15分钟的系统平均负载 
          • 系统平均负载:单核CPU情况下,0.00 表示没有任何负荷,1.00表示刚好满负荷,超过1侧表示超负荷,理想值是0.7;
          • 多核CPU负载:CPU核数 * 理想值0.7 = 理想负荷,例如:4核CPU负载不超过2.8何表示没有出现高负载。
      • 第2行:Tasks 进程相关信息 
        • 第1段:进程总数,例如:Tasks: 231 total, 表示总共运行231个进程
        • 第2段:正在运行的进程数,例如:1 running,
        • 第3段:睡眠的进程数,例如:230 sleeping,
        • 第4段:停止的进程数,例如:0 stopped,
        • 第5段:僵尸进程数,例如:0 zombie
      • 第3行:Cpus CPU相关信息,如果是多核CPU,按数字1可显示各核CPU信息,此时1行将转为Cpu核数行,数字1可以来回切换。 
        • 第1段:us 用户空间占用CPU百分比,例如:Cpu(s): 12.7%us,
        • 第2段:sy 内核空间占用CPU百分比,例如:8.4%sy,
        • 第3段:ni 用户进程空间内改变过优先级的进程占用CPU百分比,例如:0.0%ni,
        • 第4段:id 空闲CPU百分比,例如:77.1%id,
        • 第5段:wa 等待输入输出的CPU时间百分比,例如:0.0%wa,
        • 第6段:hi CPU服务于硬中断所耗费的时间总额,例如:0.0%hi,
        • 第7段:si CPU服务于软中断所耗费的时间总额,例如:1.8%si,
        • 第8段:st Steal time 虚拟机被hypervisor偷去的CPU时间(如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)
      • 第4行:Mem 内存相关信息(Mem: 12196436k total, 12056552k used, 139884k free, 64564k buffers) 
        • 第1段:物理内存总量,例如:Mem: 12196436k total,
        • 第2段:使用的物理内存总量,例如:12056552k used,
        • 第3段:空闲内存总量,例如:Mem: 139884k free,
        • 第4段:用作内核缓存的内存量,例如:64564k buffers
      • 第5行:Swap 交换分区相关信息(Swap: 2097144k total, 151016k used, 1946128k free, 3120236k cached) 
        • 第1段:交换区总量,例如:Swap: 2097144k total,
        • 第2段:使用的交换区总量,例如:151016k used,
        • 第3段:空闲交换区总量,例如:1946128k free,
        • 第4段:缓冲的交换区总量,3120236k cached
    • A: PID = (Process Id) 进程Id;
    • E: USER = (User Name) 进程所有者的用户名;
    • H: PR = (Priority) 优先级
    • I: NI = (Nice value) nice值。负值表示高优先级,正值表示低优先级
    • O: VIRT = (Virtual Image (kb)) 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    • Q: RES = (Resident size (kb)) 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    • T: SHR = (Shared Mem size (kb)) 共享内存大小,单位kb
    • W: S = (Process Status) 进程状态。D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
    • K: %CPU = (CPU usage) 上次更新到现在的CPU时间占用百分比
    • N: %MEM = (Memory usage (RES)) 进程使用的物理内存百分比
    • M: TIME+ = (CPU Time, hundredths) 进程使用的CPU时间总计,单位1/100秒
    • X: COMMAND = (Command name/line) 命令名/命令行

    top命令选项

    • -b:以批处理模式操作;
    • -c:显示完整的治命令;
    • -d:屏幕刷新间隔时间;
    • -I:忽略失效过程;
    • -s:保密模式;
    • -S:累积模式;
    • -i<时间>:设置间隔时间;
    • -u<用户名>:指定用户名;
    • -p<进程号>:指定进程;
    • -n<次数>:循环显示的次数。

    3. kill命令

    终止进程的工具 kill 、killall、pkill、xkill

    终止一个进程或终止一个正在运行的程序,一般是通过 kill 、killall、pkill、xkill 等进行。比如一个程序已经死掉,但又不能退出,这时就应该考虑应用这些工具。

    另外应用的场合就是在服务器管理中,在不涉及数据库服务器程序的父进程的停止运行,也可以用这些工具来终止。为什么数据库服务器的父进程不能用这些工具杀死呢?原因很简单,这些工具在强行终止数据库服务器时,会让数据库产生更多的文件碎片,当碎片达到一定程度的时候,数据库就有崩溃的危险。比如mysql服务器最好是按其正常的程序关闭,而不是用pkill mysqld 或killall mysqld 这样危险的动作;当然对于占用资源过多的数据库子进程,我们应该用kill 来杀掉。

    3.1  kill     kill的应用是和ps 或pgrep 命令结合在一起使用的;

    kill [信号代码]    进程ID

    • -l <信息编号>  若不加<信息编号>选项,则-l参数会列出全部的信息名称。
    • -s <信息名称或编号>  指定要送出的信息。
    • [程序]  [程序]可以是程序的PID或是PGID,也可以是工作编号。

    注:信号代码可以省略;我们常用的信号代码是 -9 ,表示强制终止;

    举例:

    [root@localhost ~]# ps auxf |grep httpd

    root 4939 0.0 0.0 5160 708 pts/3 S+ 13:10 0:00 /_ grep httpd

    root 4830 0.1 1.3 24232 10272 ? Ss 13:02 0:00 /usr/sbin/httpd

    apache 4833 0.0 0.6 24364 4932 ? S 13:02 0:00 /_ /usr/sbin/httpd

    apache 4834 0.0 0.6 24364 4928 ? S 13:02 0:00 /_ /usr/sbin/httpd

    apache 4835 0.0 0.6 24364 4928 ? S 13:02 0:00 /_ /usr/sbin/httpd

    apache 4836 0.0 0.6 24364 4928 ? S 13:02 0:00 /_ /usr/sbin/httpd

    apache 4840 0.0 0.6 24364 4928 ? S 13:02 0:00 /_ /usr/sbin/httpd


    我们看上面例子中的第二列,就是进程PID的列,其中4830是httpd服务器的父进程,从4833-4840的进程都是它4830的子进程;如果我们杀掉父进程4830的话,其下的子进程也会跟着死掉;

    [root@localhost ~]# kill 4840 注:杀掉4840这个进程;

    [root@localhost ~]# ps -auxf |grep httpd 注:查看一下会有什么结果?是不是httpd服务器仍在运行?

    [root@localhost ~]# kill 4830 注:杀掉httpd的父进程;

    [root@localhost ~]# ps -aux |grep httpd 注:查看httpd的其它子进程是否存在,httpd服务器是否仍在运行?


    对于僵尸进程,可以用kill -9 来强制终止退出;

    比如一个程序已经彻底死掉,如果kill 不加信号强度是没有办法退出,最好的办法就是加信号强度 -9 ,后面要接杀父进程;比如;

    [root@localhost ~]# ps aux |grep gaim

    beinan 5031 9.0 2.3 104996 17484 ? S 13:23 0:01 gaim

    root 5036 0.0 0.0 5160 724 pts/3 S+ 13:24 0:00 grep gaim

    或 [root@localhost ~]# pgrep -l gaim

    5031 gaim

    [root@localhost ~]# kill -9 5031

    2. killall

    killall 通过程序的名字,直接杀死所有进程

    用法:killall 正在运行的程序名                                    killall 也和ps或pgrep 结合使用,比较方便;通过ps或pgrep 来查看哪些程序在运行;

    举例:

    [root@localhost beinan]# pgrep -l gaim

    2979 gaim

    [root@localhost beinan]# killall gaim

    3. pkill

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

    应用方法:     #pkill 正在运行的程序名

    举例:

    [root@localhost beinan]# pgrep -l gaim

    2979 gaim

    [root@localhost beinan]# pkill gaim

    4. xkill

    xkill 是在桌面用的杀死图形界面的程序。
    比如当firefox 出现崩溃不能退出时,点鼠标就能杀死firefox 。当xkill运行时出来和个人电脑的图标,哪个图形程序崩溃一点就OK了。如果您想终止xkill ,就按右键取消;

    xkill 调用方法:

    [root@localhost ~]# xkill

  • 相关阅读:
    豆瓣电台WP7客户端 MVVM重构记录之使用MVVM Light实现Event绑定
    使用DotNetOpenAuth来实现有道云笔记的授权
    豆瓣电台WP7客户端 MVVM重构记录之总结
    使用Npgsql连接Postgres
    WPF自定义一个MessageBox
    字符集其实很简单
    pytest封神之路第六步 断言技巧
    pytest封神之路第七步 用例查找原理
    一文搞懂Cookie,Session,Token,JWT
    典藏版Web功能测试用例库
  • 原文地址:https://www.cnblogs.com/yaoyaojcy/p/9178552.html
Copyright © 2020-2023  润新知