(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 杀死后台作业
原文地址:http://imsupeng.blog.51cto.com/10651675/1691097