您的位置:首页 > 运维架构 > Linux

Linux进程查看与管理

2015-09-03 13:55 417 查看
(A)、进程相关的概念计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等。这些最基础的计算机动作被称为指令(instruction).程序(program)是由这些指令的集合所构成。程序一般是存储在磁盘上某个路径下的一个可执行文件,程序运行起来后,便成了进程(process),因此,进程便是程序的具体实现。因为Linux的哲学思想之一便是组合小程序,完成复杂任务,因此,要完成某功能可能需要启动多个小程序,因此,进程也会产生多个。进程都运行于内存当中。 每个进程在系统中都会有一个唯一的数字标识符,这个数字被称为进程的PID(Process ID).Linux系统在开机后,会自动运行起第一个程序(/sbin/init),在进程中的名字为init,PID为1,init进程在会一直存在于内存中,直到系统关机才会被销毁。其他程序运行起来,都是通过init进程来调用fork()函数生成的。因此init管理所有进程。进程若需要完成某一任务时,会调用fork()函数生成一个新进程,这个新进程会复制老进程的所有内容,并在内存中获段一段新的地址空间,新进程便是老进程的子进程,继承老进程的所有属性,而老进程便是新进程的父进程(Parent process).相对于子进程来讲,子进程通过PPID(Parent Process ID)来标识符进程。即,除init以外所有进程都会有一个PPID为1.进程有优先级概念,同一时刻,CPU只有一颗,如果N多进程都要使用CPU来完成工作,那么必须需要排队等待,这样效率极低,为解决这一难题,对cpu进行时间分片,规定每个进程只允许在cpu上运行特定的一小段时间,时间段过去后,不管进程任务是否完成,都会被T出CPU,因此,需要给进程优先级来帮助紧要任务优先使用cpu。进程有0-139个优先级别。0-99这100个级别为动态优先级,标识着进程在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命令格式有两种:1、Unix风格,选项加”-” ;2、BSD风格,选项不加”-”常用选项有: 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 杀死后台作业
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  top pgrep htop glances