| 
 | 
 
一. 停止历程的东西 kill 、killall、pkill、xkill 
 
停止一个历程或停止一个正在运行的法式,一样平常是经由过程 kill 、killall、pkill、xkill 等举行。好比一个法式已经死掉,但又不克不及退出,这时就应该思量应用这些东西。  
 
别的应用的场所便是在办事器办理中,在不涉及数据库办事器法式的父历程的遏制运行,也可以用这些东西来停止。为什么数据库办事器的父历程不克不及用这些东西杀死呢?缘故原由很简略,这些东西在强行停止数据库办事器时,会让数据库发生更多的文件碎片,当碎片到达必然水平的时辰,数据库就有解体的伤害。好比mysql办事器最好是按其正常的法式封闭,而不是用pkill mysqld 或killall mysqld 如许伤害的行动;固然对付占用资本过多的数据库子历程,我们应该用kill 来杀掉。  
 
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 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  
 
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 
 
二.Linux的kill号令与旌旗灯号节制 
 
旌旗灯号是用来与保卫法式和历程通讯的。任何勾当使命都是一个历程,而保卫法式是期待对某些事务做出反映大概根据日程放置实行使命的背景办事。一个法式必需有建在此中的旌旗灯号处置法式用于捕捉和应复书号。在LINUX中的signal 参考指南诠释了各类分歧旌旗灯号和这些旌旗灯号的用途。旌旗灯号是由“kill”号令发出的。kill -l号令可以表现一个可用旌旗灯号列表及其编号。 
 
全部的保卫法式和历程都有一个历程ID(PID),比方利用ps定名所表现的内容: 
 
$ ps aux  
 
USER PID %CPU %MEM TTY STAT COMMAND  
 
root 1 0.0 0.1 ? S init [2]  
 
105 7783 0.0 0.2 ? Ss /usr/bin/dbus-daemon --system  
 
hal 7796 0.0 0.7 ? Ss /usr/sbin/hald  
 
postfix 7957 0.0 0.2 ? S qmgr -l -t fifo -u -c  
 
nagios 8371 0.0 0.2 ? SNs /usr/sbin/nagios /etc/nagios/nagios.cfg  
 
这个输出是颠末简化的。你在体系中可以看到更多的行和栏目。若是某些历程耗损了你的全数CPU大概内存,你可以在这个输出的%CPU和%MEM列中发明它们。找到失控的历程的一种更快捷的方式是利用top号令,由于根据默认的设置,利用占用CPU资本最多的历程在最上面表现。我们可以利用一条“yes”号令来测试一下: 
 
$ yes carla is teh awesum  
 
这个号令将以很高的速率频频表现“carla is teh awesum”,直到你遏制它运行。这将使你的CPU利用率到达鉴戒线。 
 
$ top  
 
...  
 
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  
 
12144 carla 25 0 31592 17m 13m R 93.4 3.5 0:50.26 konsole  
 
22236 carla 15 0 2860 468 400 S 4.3 0.1 0:00.97 yes  
 
阐发一下这个成果,你会发明一些风趣的事,你会发明,占用CPU最多的法式是konsole假造终端法式,而不是“yes”号令,这是由于“yes”号令是在konsole终端法式中运行的。若是在一个“真正的”节制台(按Ctrl+alt+f2键)中运行同样的号令序列,你将看到“yes”号令被排在第一位。  
 
有很多遏制“yes”号令运行的体例。若是你要回到运行它的shell中,按CTRL+c键就可以了。大概你可以在另一个shell顶用“kill”号令遏制“yes”号令的运行,Kill号令背面跟PID大概号令名称,如下如示: 
 
$ kill 22236  
 
大概 
 
$ killall yes  
 
按CTRL+c键发出一个SIGINT(旌旗灯号2),这个旌旗灯号是键盘要求取得节制权的间断旌旗灯号。kill和killall这两个号令根据默认的设置都发出一个SIGTERM旌旗灯号(编号15)。法式中可以设置对SIGTERM旌旗灯号(15)是捕获大概纰漏,大概以分歧的体例诠释。是以,若是你的法式对付KILL号令的反映与你预期分歧,很大概是被KILL的方针法式的题目。 
 
停止一个父历程凡是也停止了它的子历程。不外,环境并不老是如斯。你知道子历程是什么吗?利用ps号令加上-f选项就可以看到,如下所示: 
 
$ ps axf  
 
22371 ? R 2:35 _ konsole [kdeinit]  
 
22372 pts/3 Ss 0:00 | _ /bin/bash  
 
24322 pts/3 S+ 0:00 | | _ yes carla is teh awesum  
 
22381 pts/4 Rs 0:00 | _ /bin/bash  
 
24323 pts/4 R+ 0:00 | | _ ps axf  
 
此刻,回到SIGHUP的话题 
 
SIGHUP的发音是“sig-hup”,是signal hangup的缩写,寄义是“中断旌旗灯号”。你若何发送一个SIGHUP旌旗灯号呢?这里有几种体例: 
 
# kill -HUP [pid]  
 
# killall -HUP [process-name]  
 
# kill -1 [pid]  
 
# killall -1 [process-name]  
 
是以,你可以利用PID大概名称,旌旗灯号名称大概号码。那么为什么要如许做而不利用/etc/init.d/foo号令从头启动呢?利用它们本身的init(初始化)文件来节制办事是优先选择的体例,由于这些文件凡是包罗健全和错误查抄以及分外的功效。利用“kill”号令和旌旗灯号的首要缘故原由是尽大概明白地停止挂起和失控的历程,而不必从头启动大概登出。 
 
停止历程 
 
正如你在关于旌旗灯号的man page中所看到的,有十几种节制历程的方式。下面是一些常用的方式: 
 
kill -STOP [pid] 
 
发送SIGSTOP (17,19,23)遏制一个历程,而并不用灭这个历程。 
 
kill -CONT [pid] 
 
发送SIGCONT (19,18,25)从头起头一个遏制的历程。 
 
kill -KILL [pid] 
 
发送SIGKILL (9)逼迫历程当即遏制,而且不实行清算操纵。 
 
kill -9 -1 
 
停止你拥有的全数历程。 
 
SIGKILL和SIGSTOP旌旗灯号不克不及被捕获、封闭大概纰漏,可是,别的的旌旗灯号可以。以是这是你的最终兵器。 
 
Bash shell的Kil号令l 
 
Bash外壳包罗一个内置的kill号令,当实行下面号令: 
 
$ type -all kill  
 
kill is a shell built-in  
 
kill is /bin/kill  
 
号令的成果表白有两个kill号令,一个是BASH的内置号令,另一个是/bin/kill可实行法式。一样平常来说这两个号令不太大概碰到辩论的环境,不外,若是你确实碰到了kill号令举动非常时,你可以明白的指定/bin/kill号令。 
 
你必然要进一步查阅下面的资本中列出的参考资本来领会Linux中kill的妙用,由于这是你**维护Linux体系范畴的门票。这些常识可以或许让你像做外科手术一样对体系举行维护,而不消在碰到题目时每一次都从头启动体系,就像我们知道的某些蹩脚的操纵体系那样。 
 
资本 
 
Linux Cookbook一书的第七章“起头和停止Linux” 
 
bash (1) - GNU Bourne-Again Shell 
 
yes (1) - 在被停止前频频打印字符 
 
signal (7) - 可用旌旗灯号列表 
 
ps (1) - 陈述当进步程的快照 
 
kill (1) - 向一个历程发出旌旗灯号 
 
killall (1) - 按名字覆灭历程 
 
pkill (1) - 按照名字和别的属性检察大概发出历程旌旗灯号 
 
skill (1) - 发送一个旌旗灯号大概陈述历程状况 
 
xkill (1) - 根据X资本覆灭一个客户法式 |   
 
 
 
 |