kill 命令

当需要结束一个前台进程的时候,只需<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  指定用户         
复制代码

应用实例 :

  1. 强行中止(经常使用的杀掉)一个进程标识号为324的进程:

    kill -9 324
    复制代码
  2. 解除Linux系统的死锁:
    在 Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。此时一般不用重新启动计算机,只需要中止(或者说是关闭)这个有问题的程序即 可。当kill处于X-Window界面时,主要的程序(除了崩溃的程序之外)一般都已经正常启动了。此时打开一个终端,在那里中止有问题的程序。比如, 如果Mozilla浏览器程序出现了锁死的情况,可以使用kill命令来中止所有包含有Mozolla浏览器的程序。首先用top命令查处该程序的 PID,然后使用kill命令停止这个程序:

    kill -SIGKILL XXX
    复制代码

    其中,XXX是包含有Mozolla浏览器的程序的进程标识号。

  3. 使用命令回收内存
    我们知道内存对于系统是非常重要的,回收内存可以提高系统资源。kill命令可以及时地中止一些“越轨”的程序或很长时间没有相应的程序。例如,使用top命令发现一个无用 (Zombie) 的进程,此时可以使用下面命令:

    kill -9 XXX
    复制代码

    其中,XXX是无用的进程标识号。

    然后使用下面命令:

    free 
    复制代码

    此时会发现可用内存容量增加了。

  4. killall命令
    Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:

    killall -HUP inetd 
    复制代码

注意: 杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志。

查询并干掉进程

首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令kill -pid。以httpd为例:

ps: 标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保 在杀死父进程之前,先杀死其所有的子进程。

确定要杀死进程的PID或PPID

ps -ef | grep httpd 
复制代码

假设 看到httpdpid80

干掉子进程

获取 httpdpid后,就有多种方式将这个进程以及他的子进程干掉。出来混是要讲信用的,说砍你全家就一定要砍你全家。 方法如下:

  1. 以优雅的方式结束进程
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,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值