码迷,mamicode.com
首页 > 系统相关 > 详细

Linux进程查看与管理

时间:2015-09-03 21:54:15      阅读:432      评论:0      收藏:0      [点我收藏+]

标签:glances   htop   pgrep   top   

(A)、进程相关的概念

计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等。这些最基础的计算机动作被称为指令(instruction).程序program)是由这些指令的集合所构成。程序一般是存储在磁盘上某个路径下的一个可执行文件,程序运行起来后,便成了进程(process),因此,进程便是程序的具体实现。因为Linux的哲学思想之一便是组合小程序,完成复杂任务,因此,要完成某功能可能需要启动多个小程序,因此,进程也会产生多个。进程都运行于内存当中。

    每个进程在系统中都会有一个唯一的数字标识符,这个数字被称为进程的PID(Process ID).

Linux系统在开机后,会自动运行起第一个程序(/sbin/init),在进程中的名字为initPID1init进程在会一直存在于内存中,直到系统关机才会被销毁。其他程序运行起来,都是通过init进程来调用fork()函数生成的。因此init管理所有进程。进程若需要完成某一任务时,会调用fork()函数生成一个新进程,这个新进程会复制老进程的所有内容,并在内存中获段一段新的地址空间,新进程便是老进程的子进程,继承老进程的所有属性,而老进程便是新进程的父进程(Parent process).相对于子进程来讲,子进程通过PPID(Parent Process ID)来标识符进程。即,除init以外所有进程都会有一个PPID1.

进程有优先级概念,同一时刻,CPU只有一颗,如果N多进程都要使用CPU来完成工作,那么必须需要排队等待,这样效率极低,为解决这一难题,对cpu进行时间分片,规定每个进程只允许在cpu上运行特定的一小段时间,时间段过去后,不管进程任务是否完成,都会被TCPU,因此,需要给进程优先级来帮助紧要任务优先使用cpu。进程有0-139个优先级别。0-99100个级别为动态优先级,标识着进程在cpu上的所剩时间,随时间的变化而变化,也被称为实时优先级100-139为进程的静态优先级,可通过nice值对其进行修改。静态优先级所对应的nice值为-20~19,即-20对应100,19对应139.

进程分为两类:

a、  前台进程(用户进程):由用户通过终端启动的进程

b、  守护进程(daemon):内核在系统引导过程中启动的进程

Attention:前台进程也可以被送往后台,以守护模式运行。(具体操随后演示)

 

     进程的运行状态,及在进程查看器中显示的标记:

a、  运行中(Running),通常以”R”标记

b、  就绪态(Ready)

c、  睡眠态

可中断睡眠: S (Interruptible sleep),不需要额外数据准备的进程不可中断睡眠:D (Uninterruptible sleep),正在IO读写数据的进程

d、  停止态:T Stopped

e、  僵死态:Z(Zombie)

子进程完成任务,释放进程所占用的资源,进入僵死状态,等待父进程收回

f、  ”+”代表前台进程

g、  ”<” 高优先级进程

h、  “N”低优先级进程

i、  “s” 表示该进程是某一进程的父进程

 (B)、进程查看与管理的命令:

1、       ps命令- report a snapshot of the current processes.

man手册对其的描述为报告当前进程的快照,也就是说在命令行键入ps那一时刻,系统中所运行的进程状态信息。实际上,进程查看工具所对用户的反馈信息都是通过读取/proc下,以数字(PID)开头的目录中的信息作以呈现。技术分享

ps命令格式有两种:1Unix风格,选项加”-”  2BSD风格,选项不加”-”

常用选项有: 

A)Unix风格常用选项:常用组合(ps –eFH)

-e   显示所有进程

-f   将发起进程的命令以完整格式显示

-F   显示额外的完整信息

-H   以树状格式显示进程

如:在命令行键入:ps-ef

技术分享

图中N多用[]括起来的是内核的某些功能,我们可以忽略

执行ps –efH以树状格式显示进程,子进程相对于父进程会有缩进,查看后几行的进程,如下图技术分享

图中可见,init进程PID为1,为所有进程的父进程

执行ps –eFH,科显示更为详细的属性信息,如下图技术分享

上图中的各标题的意义:

UID        表示此进程是由哪个用户执行命令创建的

PID        进程的ID号

PPID  父进程ID号

C          占用cpu的百分比

SZ         进程所占的物理页大小

RSS        常驻内存集大小(不能放入交换分区的数据和指定)

PSR        运行在的CPU编号

STIME 进程的启动时间

TTY        启动进程的终端,?表示与终端无关

TIME  在CPU上运行的总时长

CMD        运行此进程的命令

 

B、)BSD风格常用选项; 常用组合(ps aux)

            a     显示与终端相关的进程

           u     以用户为中心,组织进程状态信息显示

           x     显示与终端无关的集成

技术分享

上图中,各标题的意义:

      与Unix风格的显示标题近乎接近:

      USER  进程的属主

      PID        进程的PID

      %CPU  同Unix风格的标题C,占用CPU的百分比

      %MEM  占用内存的百分比

      VSZ        虚拟内存集大小(可交换至交换分区的数据或指令)

      RSZ        物理内存集大小(不可交换至交换分区的数据和指令)

      TTY        启动该进程的终端

      STAT  该进程的状态

      TIME  该进程在cpu上的运行时长

      COMMAND 该进程是由哪个命令所执行

 

若想查看某一进程的相关信息,可使用管道进行命令组合来执行:

例如:查看bash进程的相关信息:

[root@www ~]# psaux | grep bash
root       1960 0.0  0.1 108472  1856 pts/0   Ss+  06:51   0:00 -bash
root       2463 0.0  0.1 108472  1848 pts/1   Ss   07:55   0:00 -bash
root       2646 0.0  0.0 103252   836 pts/1   S+   08:28   0:00 grep bash

或者

[root@www ~]# ps-ef | grep bash
root       1960  1957  0 06:51 pts/0    00:00:00 -bash
root       2463  1957  0 07:55 pts/1    00:00:00 -bash
root       2651  2463  0 08:29 pts/1    00:00:00 grep bash


 

 

 

2、      pgrep、pidof命令

该命令跟上一个进程或命令,可查看搜索与进程相关的PID,例如:

[root@www ~]# pidof /bin/bash
2463 1960
[root@www ~]# pgrep bash
1960
2463


 

3、      pkill 命令

pkillUSERNAME   杀死与USERNAEM相关的所有进程

pkill PROCESS       杀死进程名相关的所有进程

例如:

[root@www ~]#service httpd start
Starting httpd: httpd:apr_sockaddr_info_get() failed for www.welcome.com
httpd: Could notreliably determine the server‘s fully qualified domain name, using 127.0.0.1for ServerName
                                                          [  OK  ]
[root@www ~]# psaux | grep htt  
root       2045 0.0  0.3 186396  3892 ?       Ss   09:05   0:00 /usr/sbin/httpd
apache     2048 0.0  0.2 186528  2496 ?       S    09:05   0:00 /usr/sbin/httpd
apache     2049 0.0  0.2 186528  2496 ?       S    09:05   0:00 /usr/sbin/httpd
apache     2050 0.0  0.2 186528  2496 ?       S    09:05   0:00 /usr/sbin/httpd
apache     2051 0.0  0.2 186528  2496 ?       S    09:05   0:00 /usr/sbin/httpd
apache     2052 0.0  0.2 186528  2496 ?       S    09:05   0:00 /usr/sbin/httpd
apache     2053 0.0  0.2 186528  2496 ?       S    09:05   0:00 /usr/sbin/httpd
apache     2054 0.0  0.2 186528  2496 ?       S    09:05   0:00 /usr/sbin/httpd
apache     2055 0.0  0.2 186528  2496 ?       S    09:05   0:00 /usr/sbin/httpd
root       2057 0.0  0.0 103256   844 pts/0   S+   09:05   0:00 grep htt
[root@www ~]#pkill httpd        
[root@www ~]# psaux | grep htt
root       2060 0.0  0.0 103252   836 pts/0   S+   09:05   0:00 grep htt


 

 

 

4、       top命令—以特定间隔时间刷新显示内存中的任务信息

命令的使用很简单,在命令行模式下键入top,便可启动,

技术分享

top命令的顶部被分成三个区域,红色区域为系统的时间相关黄颜色区域为cpu相关橙色区域内存相关,这三个区域分别对应”l”、”t”、”m”三个字母来打开或关闭显示。

  上述三个区域的每个参数简介:

  红色区域:

       Up之前的时间为当前系统时间

       Up 10 min  为系统的开机以来所运行的时长

       1 user     表明当前系统共有1个用户登录

           Load average:后面的三个数字分别表示1分钟内的负载情况;5分钟内的负载;15分钟内的负载

    
可由[root@www ~]# uptime  命令获取;


    黄颜色区域:

Tasks: 145total,   1 running, 144 sleeping,   0 stopped,  0 zombie

共有145个进程,1个正在运行,144个处于运行状态,0个停止状态,0个僵死状态

Cpu(s):  0.2%us, 0.2%sy,  0.0%ni, 99.8%id,  0.0%wa, 0.0%hi,  0.0%si,  0.0%st

       us: 用户进程,未经过调整nice值的所占cpu的百分比

       sy:系统指令所占cpu的百分比

       ni:调整过nice值的进程所占cpu的百分比

       id:cpu的空闲百分比

       wa:等待IO的时间百分比

       hi:处理硬中断的时间百分比

       si:处理软中断的时间百分比

       st被虚拟化所偷走的时间百分比

橙色区域

Mem/swap:总空间,已用空间,空闲空间,用于缓冲的空间

      

在top的运行窗口中,键入”h”来获取帮助信息。常用选项如下:

“Z”调整显示颜色 ;”B”关键字加粗显示

k    输入k键跟上PID杀死进程;

‘r‘ 重新设置进程的nice值

输入1键,如果主机有多颗cpu,会展开显示,如下:技术分享

“M”  以内存占用百分比进行排序

“P”  以cpu占用百分比进行排序

“T”  以累积占据cpu时长进行排序

直接键入”s”,可调整top的刷新频率,如下:

技术分享

“2”为设定的刷新时间,以秒为单位;

关于top命令的显示标题说明:

       PID   进程的PID

       USER  进程的属主,即发起该进程的用户

       PR    进程的优先级

       NI    进程的nice值

       VIRT  进程所占的虚拟内存大小

       RES   进程的常驻内存大小

       SHR   进程的共享内存大小

       S     进程的运行状态

       %CPU  进程所占cpu的百分比

       %MEM  进程所占内存的百分比

       TIME+ 进程在CPU上运行的总时长

       COMMAND    发起进程的命令或程序

Top命令还有几个常用选项:

       top –b  批次分页方式显示

             -n #   可指明批次分页显示的次数

             -d # 指明刷新时间

如:[root@www~]# top -d 3  ;进入top界面后,就会以3秒的间隔进行刷新

5、       htop命令:由Fedra研发,因此,要想获取该命令可在Fedra EPEL源中进行下载安装;

该命令的运行机制和top命令一样,也是以固定的时间间隔进行刷新显示进程的相关信息。相比top而言,htop的显示比较漂亮,功能也比top强大一些,并且操作更加直观一些;启用方法也是直接在命令行中键入htop命令即可启动该程序;如下

技术分享

 

按F2键进入设置模式,可调整顶部的显示格式以及其他功能;

如下:

技术分享

F3键可键入想要搜索的进程关键字,若想删除键入的关键字,需要按住Ctrl键+退格键才可以删除

技术分享

 

F4键键入关键字,便会只显示与关键字相关的进程信息,若想删除键入的关键字,需要按住Ctrl键+退格键才可以删除;如下:

技术分享

htop界面所显示的内容标题和top中的标题含义一样,可参考top命令的标题;在此界面中有三个常用的选项参数:

      s     可追踪进程的系统条用

      l     可列出进程所打开的文件

      a     可将进程绑定至指定cpu上运行

 

 

 

6、       vmstat  -- 查看虚拟内存的使用情况,通过读取/proc/stat和/proc/*/stat中的数据回馈给用户。

常用选项:

      -s    显示内存统计信息,读取/proc/meminfo

      -n    指定刷新延迟时间,默认vmstat只显示一次信息,但指定延迟后,会根据延迟时长循环输出信息至屏幕

      -t    指定刷新间隔后,限定刷新显示的次数

例如:
[root@www ~]# vmstat 
procs -----------memory---------- ---swap-- -----io------system-- -----cpu-----
 r  b  swpd   free   buff cache   si   so   bi    bo   in  cs us sy id wa st
 1 0      0 833156  16440 62808    0    0    8     1   15  13  0  0 100 0  0
[root@www ~]# vmstat -n 2 -t 3
procs -----------memory---------- ---swap-- -----io------system-- -----cpu------ ---timestamp---
 r  b  swpd   free   buff cache   si   so   bi    bo   in  cs us sy id wa st
 1  0     0 832064  16448  62808   0    0     8    1   15   13 0  0 100  0 0       2015-09-03 10:42:31 CST
 0  0     0 832024  16448  62808   0    0     0    0   30   20 0  0 100  0 0       2015-09-03 10:42:33 CST
 0 0      0 831992  16448 62808    0    0    0     0   20  15  0  0 100 0  0       2015-09-03 10:42:35 CST


 

相关显示标题介绍:

procs -----------memory---------- ---swap-- -----io---- --system-------cpu-----

 r  b   swpd   free   buff  cache  si   so    bi    bo   in   cs us syid wa st

 

         r        等待运行的进程的长度(个数)    单颗cpu出现3个以上,则说明性能略差

         b       等待io完成的不可中断睡眠态的进程个数(被阻塞的队列的长度)

        

         memory

                   swapd        交换内存的使用总量

                   free   物理内存的空闲总量

                   buffer         用于buffer的内存总量

                   cache         用于cache的内存总量

                  

         swap

                   si                数据进入到swap的速率,单位是kb/s

                   so               数据离开swap的速率,单位kb/s

                  

         io

                   bi      从块设备读入数据到内存中的速率      kb/s

                   bo     保存数据至块设备的速率kb/s

                  

         system 

                   in      中断速率,每秒发生的速率个数

                   cs      上下文(进程切换)的速率

        

         cpu

                   us      用户空间

                  

                   st      被虚拟化偷走的时间比例

 

7、          pmap  报告进程的内存映射关系         读取/proc/PID/maps文件

                            pmap- report memory map of a process

大多数情况下,直接使用pmap PID  查看进程所打开的文件在内存的地址空间

 

8、          glances命令:和htop类似,从Fedra EPEL源中获取,查看系统的各项指标信息;

技术分享

可敲“h”键获取帮助,可根据自定义进行各参数的排序,定义是否显示某个模块;详情参照h帮助界面;

也可在进入界面前使用命令选项进行定义显示格式:

         glances

         -b      以Byte为单位,显示网卡数据速率

         -d      关闭磁盘io模块

         -f       /PATH/TO/somewhere 设置输入文件的位置及格式

         -o      {HTML|CSV}        

         -m     关闭mount 魔铠

         -n      禁用网络模块

         -1      单独显示cpu的信息

        

         C/S    模式运行glances远程连接

         Server模式:

                   glances-s -B IPADDR 本地地址

                  

         Client模式:

                   glances-c IPADDR

 

9、          dstat---以特定的刷新时间,逐次将内核各项指标显示至标准输出;

技术分享

         常用选项:

                   -c      显示cpu统计信息

                  -C      显示指定cpu的属性

                  -d      显示硬盘读写速率

         -D     指定字段,例如 dstat -D total,sda

                  -p      显示进程统计数据

                  -r       显示io请求相关的数据

                  -s      显示交换内存的统计数据

                  --top-cpu    最占用cpu

                  --top-mem最占用内存

                  --top-latency       显示延迟最大的进程

                  --top-io      最占据io

 

 

10、        kill及killall命令----同过向进程发送控制信号,来控制进程

kill –l   可列出kill命令所支持的所有信号;常用的信号有如下几个:

                   1-----SIGHUP       通知进程重读配置文件而不重启

                   2-----SIGINT        终止正在运行的进程,相当于Ctrl+c

                   9-----SIGKILL        杀死正在运行的进程

                   15----SIGTERM    终止正在运行的进程,允许保存正在读写的文件

                   18----SIGCONT    让停止的进程继续

                   19----SIGSTOP     让进程停止

         Kill 命令格式:

                   kill [-s signal|-p] [--]pid...

例如,在当前系统启动apache进程;在kill命令杀死指定进程,操作如下:

[root@www~]# service httpd start   ##启动httpd程序
Startinghttpd: httpd: apr_sockaddr_info_get() failed for www.welcome.com
httpd:Could not reliably determine the server‘s fully qualified domain name, using127.0.0.1 for ServerName
                                                          [  OK  ]
[root@www~]# ps aux | grep httpd   ##搜索与httpd相关的进程
root       2574 0.0  0.3 186396  3896 ?       Ss   11:03   0:00 /usr/sbin/httpd
apache     2577 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2578 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2579 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2580 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2581 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2582 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2583 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2584 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
root       2595 0.0  0.0 103256   844 pts/1   S+   11:04   0:00 grep httpd
[root@www~]# kill 2577                ##信号若不给定,kill命令默认传递第15信号;
[root@www~]# ps aux | grep httpd ## PID为2577的进程已不在内存中;
root       2574 0.0  0.3 186396  3896 ?       Ss   11:03   0:00 /usr/sbin/httpd
apache     2578 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2579 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2580 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2581 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2582 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2583 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
apache     2584 0.0  0.2 186528  2500 ?       S    11:03   0:00 /usr/sbin/httpd
root       2599 0.0  0.0 103256   844 pts/1   S+   11:05   0:00 grep httpd
 
killall命令,命令格式与kill一样,但是killall会杀死给定进程名相关的所有进程
[root@www~]# killall -15 httpd 
[root@www~]# ps aux | grep httpd   ##httpd的进程已全被清清除
root       2606 0.0  0.0 103252   836 pts/1   S+   11:07   0:00 grep httpd



 

如何让作业运行于后台

                   1、对于运行中的作业:ctrl+z技术分享

                   2、尚未启动的作业: #  COMMAND &

                   ****此类作业虽然被送往后台,但仍然与终端相关;

                            如果希望与终端剥离,需使用nohup COMMAND

                   查看所有作业:

Jobs查看后台作业;

[root@www ~]# jobs   ##查看当前后台所有作业

[1]+  Stopped                 dstat

作业控制:

fg [%]JOB_NUM   把作业调回前台

[root@www ~]# fg   ## 若存在多个后台程序,则需要使用fg %作业id,如fg %1
dstat
 
  0   0 100  0   0   0|  0    16k|4747B  876B|  0     0 |1055   981 missed 79 ticks
  0   0 100  0   0   0|  0     0 |  60B 394B|   0     0 |  7     6 
  0   0 100  0   0   0|  0     0 |  60B 346B|   0     0 | 14    13 
  0   0 100  0   0   0|  0     0 |  60B 346B|   0     0 | 22    17 ^C
[root@www ~]#


                            bg[%]JOB_NUM  让作业在后台继续运行

                            kill%JOB_NUM   杀死后台作业

 


Linux进程查看与管理

标签:glances   htop   pgrep   top   

原文地址:http://imsupeng.blog.51cto.com/10651675/1691097

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!