当需要结束一个前台进程的时候,只需<ctrl+c>
就可以了,但如果要结束一个后台进程的时候,就不是一个组合键就能搞定的了。此时需要用到kill命令,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。
kill是通过向进程发送指定信号来结束相应进程的,在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。
格式:
kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]
复制代码
命令功能:
发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。
命令参数:
-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
复制代码
应用实例 :
-
强行中止(经常使用的杀掉)一个进程标识号为324的进程:
kill -9 324 复制代码
-
解除Linux系统的死锁:
在 Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。此时一般不用重新启动计算机,只需要中止(或者说是关闭)这个有问题的程序即 可。当kill处于X-Window界面时,主要的程序(除了崩溃的程序之外)一般都已经正常启动了。此时打开一个终端,在那里中止有问题的程序。比如, 如果Mozilla浏览器程序出现了锁死的情况,可以使用kill命令来中止所有包含有Mozolla浏览器的程序。首先用top命令查处该程序的 PID,然后使用kill命令停止这个程序:kill -SIGKILL XXX 复制代码
其中,XXX是包含有Mozolla浏览器的程序的进程标识号。
-
使用命令回收内存
我们知道内存对于系统是非常重要的,回收内存可以提高系统资源。kill命令可以及时地中止一些“越轨”的程序或很长时间没有相应的程序。例如,使用top命令发现一个无用 (Zombie) 的进程,此时可以使用下面命令:kill -9 XXX 复制代码
其中,XXX是无用的进程标识号。
然后使用下面命令:
free 复制代码
此时会发现可用内存容量增加了。
-
killall
命令
Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:killall -HUP inetd 复制代码
注意: 杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志。
查询并干掉进程
首先使用ps -ef
命令确定要杀死进程的PID,然后输入以下命令kill -pid
。以httpd
为例:
ps: 标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保 在杀死父进程之前,先杀死其所有的子进程。
确定要杀死进程的PID或PPID
ps -ef | grep httpd
复制代码
假设 看到httpd
的pid
为 80
干掉子进程
获取 httpd
的pid
后,就有多种方式将这个进程以及他的子进程干掉。出来混是要讲信用的,说砍你全家就一定要砍你全家。 方法如下:
- 以优雅的方式结束进程
kill -l 80
复制代码
-l 选项告诉
kill
命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill
命令也试图杀死所留下的子进程。但这个命令也不是总能成功--或许仍然需要先手工杀死子进程,然后再杀死父进程。
2.TERM信号
给父进程发送一个TERM信号,试图杀死它和它的子进程。
kill -TERM 80
复制代码
3.killall命令
killall
命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID
。
killall httpd
复制代码
kill 的其他应用
停止和重启进程
有时候只想简单的停止和重启进程。如下:
kill -HUP 80
复制代码
该命令让Linux和缓的执行进程关闭,然后立即重启。在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启进程时就可以执行此命令。
绝杀
(除非你是搭着玩的虚拟机,否则还是不要使用)
kill -9 80
复制代码
或者
kill -s SIGKILL 80
复制代码
这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。 当使用此命令时,一定要通过ps -ef
确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。
如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。