您的位置:首页 > 运维架构 > Linux

Linux命令:Kill

2010-03-20 11:26 239 查看
语法格式
kill [-s 信号][程序] 或 kill [-l 信号]
使用说明

kill 命令发送一个信号(缺省,SIGTERM 信号)到一个正运行的程序。缺省操作一般是停止进程。如果想停止一个进程,在 ProcessID 变量中指定进程标识符(PID)。这个 shell 报告每个在后台

运行的进程的 PID(除非在一个管道上启动多个进程,这个种情况下,shell 报告最后一个进程号)。

还可用 ps 命令来发现命令的进程标识号。root 用户可用 kill 命令来停止任何进程。如果不是

root 用户,必须已经启动了要停止的进程。SignalName 以大小写无关的方式被辨认,

无 SIG 前缀。如果指定的 SignalNumber 是 0,kill 命令检查指定 PID 的有效性。

主要参数
-s{SignalName | SignalNumber} 将信号指定为信号数或信号名,例如为 SIGKILL 信号指定 -9 或KILL。
-SignalName 指定一个信号名,如 SIGHUP。
-SignalNumber 指定一个信号数。

注: 在语法中要用缺省的信号指定负 PID,必须指定作为一个信号。否则,第一个操作数被解释为一个 SignalNumber。 ProcessID 指定一个十进制整数代表一个要被发送信号的进程或进程组。如果

PID 是一个正值,kill 命令发送进程 ID 与 PID 相等的进程。如果 PID 值是 0,kill 命令发

送信号到所有进程组的 ID 等于发送者进程组的 ID 的进程。不发送信号到 PID 为 0 或 1 的进程。

如果 PID 是 -1,kill命令发送信号到所有由发送者的有效用户所有的进程。不发送信号到 PID 为 0

或 1 的进程。 如果信号为非 -1 的负数,kill 命令发送信号到进程组标识等于 PID 绝对值的所有进程。

-l 列出由实现支持的信号名称。-lExitStatus 列出去掉了公共 SIG 前缀的信号名。如果 ExitStatus

是一个十进制整数值,对应那个信号的信号名<br />被显示。如果 ExitStatus 是一个对应于由这个信号

终止的进程的退出状态值,则显示对应于这个终止这个进程的信号的名称。

应用实例

要停止一个给定的进程,请输入:

kill 1095这个通过发送缺省的 SIGTERM 信号到进程 1095 来停止它。

注:如果进程 1095 已经做了特殊安排来忽略或覆盖 SIGTERM 信号,这个进程实际可能不停止。


要停止几个忽略缺省信号的进程,请输入:

kill -kill 2098 1569这个发送信号 9,即 SIGKILL 信号,来处理 2098 和 1569。SIGKILL 信号是

个通常不能被忽略或覆盖的特殊信号。


要停止所有进程并注销自己,请输入:

kill -kill 0这个发送信号 9,即 SIGKILL 信号,到所有组 ID 等于发送者组 ID 的进程。

因为 shell 不能忽略 SIGKILL 信号,它也停止登录 shell 并注销用户。


要停止您拥有的所有进程,请输入:

kill -9 -1这发送信号 9,就是 SIGKILL 信号,到所有由有效用户拥有的进程,甚至那些在其他工作站上

启动的和属于其他进程组的进程。如果一个您请求的列表正被打印,它也被停止。


要发送一个不同的信号到一个进程,请输入:

kill -USR1 1103kill 命令的名称是一个误导,因为许多信号,包括 SIGUSR1,并不停止进程。

发生在 SIGUSR1 信号上的操作由正运行的特定的应用程序定义。注:要发送信号 15,或用这种

形式的 kill 命令发送 SIGTERM 信号,必须明确地指定 -15 或 TERM。

进程不能kill掉的情况
做过Linux开发的人通常遇到过一个进程不能kill掉的情况,即使使用的是kill -9方式,而一般的教课书都只说kill -9能杀死任何进程,
遇到这种情况时就会感觉到很矛盾,其它这也是正常的,通常有两种情况是不能kill掉的:
一是进程已经成为僵死进程,当它的父进程将它回收或将它的父进程kill掉即可在ps输出看不到了;
二是进程正处在内核状态中,Linux进程运行时分内核和用户两种状态,当进程进入内核状态后,会屏蔽所有信号,包括SIGKIL,
所以这个时候kill -9也变得无效了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: