设为首页收藏本站

数码鹭岛论坛

 找回密码
 注-册

QQ登录

只需一步,快速开始

搜索
查看: 1222|回复: 1
打印 上一主题 下一主题

Kill杀死进程方法大全

[复制链接]
跳转到指定楼层
1#
发表于 2014-10-30 20:38:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
名称:kill
使用权限:所有使用者
使用方式:
kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]
说明:kill 送出一个特定的信号 (signal) 给行程 id 为 pid 的行程根据该信号而做特定的动作, 若没有指定, 预设是送出终止 (TERM) 的信号
把计?
-s (signal) : 其中可用的讯号有 HUP (1), KILL (9), TERM (15), 分别代表着重跑, 砍掉, 结束; 详细的信号可以用 kill -l
-p : 印出 pid , 并不送出信号
-l (signal) : 列出所有可用的信号名称


范例:
将 pid 为 323 的行程砍掉 (kill) :
kill -9 323
将 pid 为 456 的行程重跑 (restart) :
kill -HUP 456

--------------------------------------------------------------------------------

*杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志
  
首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令:
# kill -pid   
注释:标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。  
--------------------------------------------------------------------------------
*确定要杀死进程的PID或PPID
# ps -ef | grep httpd  
--------------------------------------------------------------------------------
*以优雅的方式结束进程
# kill -l PID
-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总能成功--或许仍然需要先手工杀死子进程,然后再杀死父进程。  
--------------------------------------------------------------------------------
*TERM信号
给父进程发送一个TERM信号,试图杀死它和它的子进程。
# kill -TERM PPID  
--------------------------------------------------------------------------------
*killall命令
killall命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID。
# killall httpd  
--------------------------------------------------------------------------------
*停止和重启进程  
有时候只想简单的停止和重启进程。如下:
# kill -HUP PID
该命令让Linux和缓的执行进程关闭,然后立即重启。在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启进程时就可以执行此命令。  
--------------------------------------------------------------------------------
*绝杀 kill -9 PID
同意的 kill -s SIGKILL  
这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。


当使用此命令时,一定要通过ps -ef确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。
如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
2#
 楼主| 发表于 2014-10-30 20:39:23 | 只看该作者

杀死某个用户的所有进程

在一台100多人使用的 SUN 服务器上经常发现有人滥用资源,平时用用就算了,到了交作业的时候100多号人同时登录使用,服务器明显迟缓,特别是实验室用的是瘦客户机,没硬盘,SUN 客户端需要从服务器装载系统镜像,而且编译、运行程序都要在服务器上完成。如果发现某个用户运行很多进程,并且进程还有子进程,怎么能方便的找出全部进程并 kill 掉呢?

    ps -ef | grep ^username | cut -c 10-15 | xargs kill -9

把全部进程打印出来根据用户名过滤后找出全部进程号,然后逐行 kill 掉。xargs 就是用来把 cut 后的输出逐个以空白符分割后输给 kill。注意上面的 grep ^username 不能缺 ^,^username 表示从一行开始匹配 username,比如就可以避免匹配到 sshd: username@pts/0。不过尽管加了 ^,上面的代码仍然有个小 bug,如果恰好有个进程名和用户名完全一样怎么办?可以用 ps -u 找出所有与 username 相关的进程,然后 grep -v 过滤掉 PID 只剩下进程信息,然后逐行 kill 掉,如下:

    ps -u username | grep -v PID | cut -c 0-5 | xargs kill -9

不过上面的命令还有个小问题就是如果 cut 的时候不小心 cut 多了或者 cut 少了怎么办?可以用 awk 过滤一列信息出来:

ps -u username | grep -v PID | awk '{print$1}'| xargs kill -9

上面的命令也可以在 Linux 上运行,不过在 Linux 下可以用更简单的 killall,Solaris 上没有 killall:

killall -u username
您需要登录后才可以回帖 登录 | 注-册

本版积分规则

小黑屋|手机版|Archiver|数码鹭岛 ( 闽ICP备20006246号 )  

counter

GMT+8, 2025-12-3 21:13 , Processed in 0.065125 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表