您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > kill,killall,pkill的区别
杀死进程命令killpkillkillallxkill一.终止进程的工具kill、killall、pkill、xkill终止一个进程或终止一个正在运行的程序,一般是通过kill、killall、pkill、xkill等进行。比如一个程序已经死掉,但又不能退出,这时就应该考虑应用这些工具。注意:另外应用的场合就是在服务器管理中,在不涉及数据库服务器程序的父进程的停止运行,也可以用这些工具来终止。为什么数据库服务器的父进程不能用这些工具杀死呢?原因很简单,这些工具在强行终止数据库服务器时,会让数据库产生更多的文件碎片,当碎片达到一定程度的时候,数据库就有崩溃的危险。比如mysql服务器最好是按其正常的程序关闭,而不是用pkillmysqld或killallmysqld这样危险的动作;当然对于占用资源过多的数据库子进程,我们应该用kill来杀掉。1.killkill的利用是和ps或pgrep号结合在同时利用的;kill[信号代码]进程ID(kill-pid)-s:指定发送的信号。-p:模拟发送信号。-l:指定信号的名称列表。pid:要中止进程的ID号。Signal:表示信号。注:信号代码可以省略;我们常用的信号代码是-9,表示强制终止;对于僵尸进程,可以用kill-9来强制终止退出;2.killallkillall通过程序的名字,直接杀死所有进程。用法:killall正在运行的程序名killall也和ps或pgrep结合使用,比较方便;通过ps或pgrep来查看哪些程序在运行3.pkillpkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。用法:pkill正在运行的程序名4.xkillxkill是在桌面用的杀死图形界面的程序。比如当firefox出现崩溃不能退出时,点鼠标就能杀死firefox。当xkill运行时出来和个人脑骨的图标,哪个图形程序崩溃一点就OK了。如果您想终止xkill,就按右键取消;xkill调用方法:[root@localhost~]#xkill二.Linux的kill命令与信号控制信号是用来与守护程序和进程通信的。任何活动任务都是一个进程,而守护程序是等待对某些事件做出反应或者按照日程安排执行任务的后台服务。一个程序必须有建在其中的信号处理程序用于捕获和应答信号。在LINUX中的signal参考指南解释了各种不同信号和这些信号的用途。信号是由“kill”命令发出的。kill-l命令可以显示一个可用信号列表及其编号。[root@localhost~]#kill-l1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL5)SIGTRAP6)SIGABRT7)SIGBUS8)SIGFPE9)SIGKILL10)SIGUSR111)SIGSEGV12)SIGUSR213)SIGPIPE14)SIGALRM15)SIGTERM16)SIGSTKFLT17)SIGCHLD18)SIGCONT19)SIGSTOP20)SIGTSTP21)SIGTTIN22)SIGTTOU23)SIGURG24)SIGXCPU25)SIGXFSZ26)SIGVTALRM27)SIGPROF28)SIGWINCH29)SIGIO30)SIGPWR31)SIGSYS34)SIGRTMIN35)SIGRTMIN+136)SIGRTMIN+237)SIGRTMIN+338)SIGRTMIN+439)SIGRTMIN+540)SIGRTMIN+641)SIGRTMIN+742)SIGRTMIN+843)SIGRTMIN+944)SIGRTMIN+1045)SIGRTMIN+1146)SIGRTMIN+1247)SIGRTMIN+1348)SIGRTMIN+1449)SIGRTMIN+1550)SIGRTMAX-1451)SIGRTMAX-1352)SIGRTMAX-1253)SIGRTMAX-1154)SIGRTMAX-1055)SIGRTMAX-956)SIGRTMAX-857)SIGRTMAX-758)SIGRTMAX-659)SIGRTMAX-560)SIGRTMAX-461)SIGRTMAX-362)SIGRTMAX-263)SIGRTMAX-164)SIGRTMAX常用:HUP1终端断线INT2中断(同Ctrl+C)QUIT3退出(同Ctrl+\)KILL9强制终止TERM15终止CONT18继续(与STOP相反,fg/bg命令)STOP19暂停(同Ctrl+Z)所有的守护程序和进程都有一个进程ID(PID),例如使用ps命名所显示的内容:$psauxUSERPID%CPU%MEMTTYSTATCOMMANDroot10.00.1?Sinit[2]10577830.00.2?Ss/usr/bin/dbus-daemon--systemhal77960.00.7?Ss/usr/sbin/haldpostfix79570.00.2?Sqmgr-l-tfifo-u-cnagios83710.00.2?SNs/usr/sbin/nagios/etc/nagios/nagios.cfg这个输出是经过简化的。你在系统中可以看到更多的行和栏目。如果某些进程消耗了你的全部CPU或者内存,你可以在这个输出的%CPU和%MEM列中发现它们。找到失控的进程的一种更快捷的方法是使用top命令,因为按照默认的设置,使用占用CPU资源最多的进程在最上面显示。我们可以使用一条“yes”命令来测试一下:$yescarlaistehawesum这个命令将以很高的速度反复显示“carlaistehawesum”,直到你停止它运行。这将使你的CPU使用率达到警戒线。$top...PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND12144carla2503159217m13mR93.43.50:50.26konsole22236carla1502860468400S4.30.10:00.97yes分析一下这个结果,你会发现一些有趣的事,你会发现,占用CPU最多的程序是konsole虚拟终端程序,而不是“yes”命令,这是因为“yes”命令是在konsole终端程序中运行的。如果在一个“真正的”控制台(按Ctrl+alt+f2键)中运行同样的命令序列,你将看到“yes”命令被排在第一位。有许多停止“yes”命令运行的方式。如果你要回到运行它的shell中,按CTRL+c键就可以了。或者你可以在另一个shell中用“kill”命令停止“yes”命令的运行,Kill命令后面跟PID或者命令名称,如下如示:$kill22236或者$killallyes按CTRL+c键发出一个SIGINT(信号2),这个信号是键盘要求取得控制权的中断信号。kill和killall这两个命令按照默认的设置都发出一个SIGTERM信号(信号15)。程序中可以设置对SIGTERM信号(15)是捕捉或者忽略,或者以不同的方式解释。因此,如果你的程序对于KILL命令的反应与你预期不同,很可能是被KILL的目标程序的问题。终止一个父进程通常也终止了它的子进程。不过,情况并不总是如此。你知道子进程是什么吗?使用ps命令加上-f选项就可以看到,如下所示:$psaxf22371?R2:35_konsole[kdeinit]22372pts/3Ss0:00|_/bin/bash24322pts/3S+0:00||_yescarlaistehawesum22381pts/4Rs0:00|_/bin/bash24323pts/4R+0:00||_psaxf现在,回到SIGHUP的话题SIGHUP的发音是“sig-hup”,是signalhangup的缩写,含义是“中止信号”。你如何发送一个SIGHUP信号呢?这里有几种方式:#kill-HUP[pid]#killall-HUP[process-name]#kill-1[pid]#killall-1[process-name]因此,你可以使用PID或者名称,信号名称或者号码。那么为什么要这样做而不使用/etc/init.d/foo命令重新启动呢?使用它们自己的init(初始化)文件来控制服务是优先选择的方式,因为这些文件通常包含健全和错误检查以及额外的功能。使用“kill”命令和信号的主要原因是尽可能明确地终止挂起和失控的进程,而不必重新启动或者登出。三.终止进程的常用方法正如你在关于信号的manpage中所看到的,有十几种控制进程的方法。下面是一些常用的方法:kill-STOP[pid]发送SIGSTOP(17,19,23)停止一个进程,而并不消灭这个进程。kill-CONT[pid]发送SIGCONT(19,18,25)重新开始一个停止的进程。kill-KILL[pid]发送SIGKILL(9)强迫进程立即停止,并且不实施清理操作。kill-9-1终止你拥有的全部进程。SIGKILL和SIGSTOP信号不能被捕捉、封锁或者忽略(见后文【信号处理机制】),但是,其它的信号可以。所以这是你的终极武器。Bashshell的Kil命令lBash外壳包含一个内置的kill命令,当执行下面命令:$type-allkillkillisashellbuilt-inkillis/bin/kill命令的结果表明有两个kill命令,一个是BASH的内置命令,另一个是/bin/kill可执行程序。一般来说这两个命令不太可能遇到冲突的情况,不过,如果你确实遇到了kill命令行为异常时,你可以明确的指定/bin/kill命令。你一定要进一步查阅下面的资源中列出的参考资源来了解Linux中kill的妙用,因为这是你进入维护Linux系统领域的门票。这些知识能够让你像做外科手术一样对系统进行维护,而不用在遇到问题时每一次都重新启动系统,就像我们知道的某些蹩脚的操作系统那样。资源LinuxCookbook一书的第七章“开始和终止Linux”bash(1)-GNUBourne-AgainShellyes(1)-在被终止前反复打印字符signal(7)-可用信号列表ps(1)-报告当前进程的快照kill(1)-向一个进程发出信号killall(1)-按名字消灭进程pkill(1)-根据名字和其它属性查看或者发出进程信号skill(1)-发送一个信号或者报告进程状态xkill(1)-按照X资源消灭一个客户程序四.linux下kill命令小结1.作用kill命令用来中止一个进程。2.格式kill[-ssignal|-p][-a]pid...kill-l[signal]3.参数-s:指定发送的信号。-p:模拟发送信号。-l:指定信号的名称列表。pid:要中止进程的ID号。Signal:表示信号。4.说明进程是Linux系统中一个非常重要的概念。Linux是一个多任务的操作系统,系统上经常同时运行着多个进程。我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务。Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。批处理进程和终端没有联系,是一个进程序列。监控进程(也称系统守护进程)是Linux系统启动时启动的进程,并在后台运行。例如,httpd是著名的Apache服务器的监控进程。kill命令的工作原理是,向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。5.应用实例
本文标题:kill,killall,pkill的区别
链接地址:https://www.777doc.com/doc-2879950 .html