1.1 进程分类;mysql
进程通常分为交互进程、批处理进程和守护进程三类。sql
值得一提的是守护进程老是活跃的,通常是后台运行,守护进程通常是由系统在开机时经过脚本自动激活启动或超级管理用户root来启动。好比在Fedora或Redhat中,咱们能够定义httpd 服务器的启动脚本的运行级别,此文件位于/etc/init.d目录下,文件名是httpd,/etc/init.d/httpd 就是httpd服务器的守护程序,当把它的运行级别设置为3和5时,当系统启动时,它会跟着启动。数据库
[root@localhost ~]# chkconfig --level 35 httpd onapache
因为守护进程是一直运行着的,因此它所处的状态是等待请求处理任务。好比,咱们是否是访问 LinuxSir.Org ,LinuxSir.Org 的httpd服务器都在运行,等待着用户来访问,也就是等待着任务处理。安全
1.2 进程的属性;服务器
进程ID(PID):是惟一的数值,用来区分进程;
父进程和父进程的ID(PPID);
启动进程的用户ID(UID)和所归属的组(GID);
进程状态:状态分为运行R、休眠S、僵尸Z;
进程执行的优先级;
进程所链接的终端名;
进程资源占用:好比占用资源大小(内存、CPU占用量);工具
1.3 父进程和子进程;优化
他们的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止,父进程并不必定终止。好比httpd服务器运行时,咱们能够杀掉其子进程,父进程并不会由于子进程的终止而终止。spa
在进程管理中,当咱们发现占用资源过多,或没法控制的进程时,应该杀死它,以保护系统的稳定安全运行;操作系统
2、进程管理;
对于Linux进程的管理,是经过进程管理工具实现的,好比ps、kill、pgrep等工具;
2.1 ps 监视进程工具;
ps 为咱们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;若是想对进程时间监控,应该用top工具;
2.1.1 ps 的参数说明;
ps 提供了不少的选项参数,经常使用的有如下几个;
l 长格式输出;
u 按用户名和启动时间的顺序来显示进程;
j 用任务格式来显示进程;
f 用树形格式来显示进程;
a 显示全部用户的全部进程(包括其它用户);
x 显示无控制终端的进程;
r 显示运行中的进程;
ww 避免详细参数被截断;
咱们经常使用的选项是组合是aux 或lax,还有参数f的应用;
ps aux 或lax输出的解释;
USER 进程的属主;
PID 进程的ID;
PPID 父进程;
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
NI 进程的NICE值,数值大,表示较少占用CPU时间;
VSZ 进程虚拟大小;
RSS 驻留中页的数量;
WCHAN
TTY 终端ID
STAT 进程状态
D Uninterruptible sleep (usually IO)
R 正在运行可中在队列中可过行的;
S 处于休眠状态;
T 中止或被追踪;
W 进入内存交换(从内核2.6开始无效);
X 死掉的进程(历来没见过);
Z 僵尸进程;
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+ 位于后台的进程组;
WCHAN 正在等待的进程资源;
START 启动进程的时间;
TIME 进程消耗CPU的时间;
COMMAND 命令的名称和参数;
2.1.2 ps 应用举例;
实例一:ps aux 最经常使用
[root@localhost ~]# ps -aux |more
能够用 | 管道和 more 链接起来分页查看;
[root@localhost ~]# ps -aux > ps001.txt
[root@localhost ~]# more ps001.txt
这里是把全部进程显示出来,并输出到ps001.txt文件,而后再经过more 来分页查看;
实例二:和grep 结合,提取指定程序的进程;
[root@localhost ~]# ps aux |grep httpd
root 4187 0.0 1.3 24236 10272 ? Ss 11:55 0:00 /usr/sbin/httpd
apache 4189 0.0 0.6 24368 4940 ? S 11:55 0:00 /usr/sbin/httpd
apache 4190 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4191 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4192 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4193 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4194 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4195 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4196 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
root 4480 0.0 0.0 5160 708 pts/3 R+ 12:20 0:00 grep httpd
实例二:父进和子进程的关系友好判断的例子
[root@localhost ~]# ps auxf |grep httpd
root 4484 0.0 0.0 5160 704 pts/3 S+ 12:21 0:00 /_ grep httpd
root 4187 0.0 1.3 24236 10272 ? Ss 11:55 0:00 /usr/sbin/httpd
apache 4189 0.0 0.6 24368 4940 ? S 11:55 0:00 /_ /usr/sbin/httpd
apache 4190 0.0 0.6 24368 4932 ? S 11:55 0:00 /_ /usr/sbin/httpd
apache 4191 0.0 0.6 24368 4932 ? S 11:55 0:00 /_ /usr/sbin/httpd
apache 4192 0.0 0.6 24368 4932 ? S 11:55 0:00 /_ /usr/sbin/httpd
apache 4193 0.0 0.6 24368 4932 ? S 11:55 0:00 /_ /usr/sbin/httpd
apache 4194 0.0 0.6 24368 4932 ? S 11:55 0:00 /_ /usr/sbin/httpd
apache 4195 0.0 0.6 24368 4932 ? S 11:55 0:00 /_ /usr/sbin/httpd
apache 4196 0.0 0.6 24368 4932 ? S 11:55 0:00 /_ /usr/sbin/httpd
这里用到了f参数;父与子关系一目了然;
2.2 pgrep
pgrep 是经过程序的名字来查询进程的工具,通常是用来判断程序是否正在运行。在服务器的配置和管理中,这个工具常被应用,简单明了;
用法:
#ps 参数选项 程序名
经常使用参数
-l 列出程序名和进程ID;
-o 进程起始的ID;
-n 进程终止的ID;
举例:
[root@localhost ~]# pgrep -lo httpd
4557 httpd
[root@localhost ~]# pgrep -ln httpd
4566 httpd
[root@localhost ~]# pgrep -l httpd
4557 httpd
4560 httpd
4561 httpd
4562 httpd
4563 httpd
4564 httpd
4565 httpd
4566 httpd
[root@localhost ~]# pgrep httpd
4557
4560
4561
4562
4563
4564
4565
4566
3、终止进程的工具 kill 、killall、pkill、xkill;
终止一个进程或终止一个正在运行的程序,通常是经过 kill 、killall、pkill、xkill 等进行。好比一个程序已经死掉,但又不能退出,这时就应该考虑应用这些工具。
另 外应用的场合就是在服务器管理中,在不涉及数据库服务器程序的父 进程的中止运行,也能够用这些工具来终止。为何数据库服务器的父进程不能用这些工具杀死呢?缘由很简单,这些工具在强行终止数据库服务器时,会让数据库 产生更多的文件碎片,当碎片达到必定程度的时候,数据库就有崩溃的危险。好比mysql服务器最好是按其正常的程序关闭,而不是用pkill mysqld 或killall mysqld 这样危险的动做;固然对于占用资源过多的数据库子进程,咱们应该用kill 来杀掉。
3.1 kill
kill的应用是和ps 或pgrep 命令结合在一块儿使用的;
kill 的用法:
kill [信号代码] 进程ID
注:信号代码能够省略;咱们经常使用的信号代码是 -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 4837 0.0 0.6 24364 4928 ? S 13:02 0:00 /_ /usr/sbin/httpd
apache 4838 0.0 0.6 24364 4928 ? S 13:02 0:00 /_ /usr/sbin/httpd
apache 4839 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
咱们查看httpd 服务器的进程;您也能够用pgrep -l 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
3.2 killall
killall 经过程序的名字,直接杀死全部进程,我们简单说一下就好了。
用法:killall 正在运行的程序名
killall 也和ps或pgrep 结合使用,比较方便;经过ps或pgrep 来查看哪些程序在运行;
举例:
[root@localhost beinan]# pgrep -l gaim
2979 gaim
[root@localhost beinan]# killall gaim
3.3 pkill
pkill 和killall 应用方法差很少,也是直接杀死运行中的程序;若是您想杀掉单个进程,请用kill 来杀掉。
应用方法:
#pkill 正在运行的程序名
举例:
[root@localhost beinan]# pgrep -l gaim
2979 gaim
[root@localhost beinan]# pkill gaim
3.4 xkill
xkill 是在桌面用的杀死图形界面的程序。好比当firefox 出现崩溃不能退出时,点鼠标就能杀死firefox 。当xkill运行时出来和我的脑骨的图标,哪一个图形程序崩溃一点就OK了。若是您想终止xkill ,就按右键取消;
xkill 调用方法:
[root@localhost ~]# xkill
kill -0 pid 不发送任何信号,可是系统会进行错误检查。
因此常常用来检查一个进程是否存在,存在返回0;不存在返回1
4、top 监视系统任务的工具;
和ps 相比,top是动态监视系统任务的工具,top 输出的结果是连续的;
4.1 top 命令用法及参数;
top 调用方法:
top 选择参数
参数:
-b 以批量模式运行,但不能接受命令行输入;
-c 显示命令行,而不只仅是命令名;
-d N 显示两次刷新时间的间隔,好比 -d 5,表示两次刷新间隔为5秒;
-i 禁止显示空闲进程或僵尸进程;
-n NUM 显示更新次数,而后退出。好比 -n 5,表示top更新5次数据就退出;
-p PID 仅监视指定进程的ID;PID是一个数值;
-q 不经任何延时就刷新;
-s 安全模式运行,禁用一些效互指令;
-S 累积模式,输出每一个进程的总的CPU时间,包括已死的子进程;
交互式命令键位:
space 当即更新;
c 切换到命令名显示,或显示整个命令(包括参数);
f,F 增长显示字段,或删除显示字段;
h,? 显示有关安全模式及累积模式的帮助信息;
k 提示输入要杀死的进程ID,目的是用来杀死该进程(默人信号为15)
i 禁止空闲进程和僵尸进程;
l 切换到显法负载平均值和正常运行的时间等信息;
m 切换到内存信息,并之内存占用大小排序;
n 提示显示的进程数,好比输入3,就在整屏上显示3个进程;
o,O 改变显示字段的顺序;
r 把renice 应用到一个进程,提示输入PID和renice的值;
s 改变两次刷新时间间隔,以秒为单位;
t 切换到显示进程和CPU状态的信息;
A 按进程生命大小进行排序,最新进程显示在最前;
M 按内存占用大小排序,由大到小;
N 以进程ID大小排序,由大到小;
P 按CPU占用状况排序,由大到小
S 切换到累积时间模式;
T 按时间/累积时间对任务排序;
W 把当前的配置写到~/.toprc中;
4.2 top 应用举例;
[root@localhost ~]# top
而后根据前面所说交互命令按个尝试一下就明白了,好比按M,就按内存占用大小排序;这个例子举不举都没有必要了。呵。。。。。。
固然您能够把top的输出传到一个文件中;
[root@localhost ~]# top > mytop.txt
而后咱们就能够查看mytop文件,以慢慢的分析系统进程状态;
5、进程的优先级:nice和renice;
在Linux 操做系统中,进程之间是竟争资源(好比CPU和内存的占用) 关系。这个竟争优劣是经过一个数值来实现的,也就是谦让度。高谦让度表示进程优化级别最低。负值或0表示对高优势级,对其它进程不谦让,也就是拥有优先占用系统资源的权利。谦让度的值从-20到19。
目前硬件技术发展极速,在大多状况下,没必要设置进程的优先级,除非在进程失控而疯狂占用资源的状况下,咱们有可能来设置一下优先级,但我我的感受没有太大的必要,在无可奈何的状况下,咱们能够杀掉失控进程。
nice 能够在建立进程时,为进程指定谦让度的值,进程的优先级的值是父进程SHELL的优先级的值与咱们所指定谦让度的相加和。因此咱们在用nice设置程序的优先级时,所指定数值是一个增量,并非优先级的绝对值;
nice 的应用举例:
[root@localhost ~]# nice -n 5 gaim & 注:运行gaim程序,并为它指定谦让度增量为5;
因此nice的最经常使用的应用就是:
nice -n 谦让度的增量值 程序
renice 是经过进程ID(PID)来改变谦让度,进而达到更改进程的优先级。
renice 谦让度 PID
renice 所设置的谦让度就是进程的绝对值;看下面的例子;
[root@localhost ~]# ps lax |grep gaim
4 0 4437 3419 10 -5 120924 20492 - S< pts/0 0:01 gaim
0 0 4530 3419 10 -5 5160 708 - R<+ pts/0 0:00 grep gaim
[root@localhost ~]# renice -6 4437
4437: old priority -5, new priority -6
[root@localhost ~]# ps lax |grep gaim
4 0 4437 3419 14 -6 120924 20492 - S< pts/0 0:01 gaim
0 0 4534 3419 11 -5 5160 708 - R<+ pts/0 0:00 grep gaim