For faster navigation, this Iframe is preloading the Wikiwand page for kill (命令).

kill (命令)

电脑运算中,kill是一个在多种流行操作系统上都可见到的命令,可向运行中的行程发送信号,以请求进程终止。

实现

[编辑]

Unix和类Unix

[编辑]

Unix类Unix操作系统中,kill是用于向进程发送信号命令。默认发送的消息是终止信号,会要求该进程退出。但kill(杀)可能会引起误解,发送的信号可能与进程杀死无关。kill命令是一个包装了kill()系统调用包装函数,该系统调用按进程ID(PID)或进程组ID(PGID)数,向系统上的进程或进程组发送信号POSIX标准规定kill应作为独立工具提供。然而,大部分shell都内建了kill的命令,用法可能与标准略有不同[1][2]

可以发送多种不同的信号(参见信号中的完整列表),而一般用户是最感兴趣的是SIGTERMSIGKILL。默认发送的信号是SIGTERM。处理这个信号的程序在退出前可以做一些有用的清理操作(如保存配置资讯到文件中)。然而,许多程序并没有专门处理此信号的处理程序,因此会调用默认的信号处理函数。而其他情况下,有特殊处理程序的程序也会出错,从而无法正确处理信号。

SIGKILL和SIGSTOP之外的所有信号可以为进程所“截获”,这意味着程序在接收到这些信号时,可以调用特殊函数。两个例外SIGKILL和SIGSTOP只能由主机系统内核处理,由其负责提供可靠的控制进程执行的方法。SIGKILL会杀死进程,而SIGSTOP可暂停它,直至SIGCONT[3]

UNIX提供了安全机制,以防止未授权用户杀死其他进程。实质上,若进程欲向另一个进程发送信号,发信进程的所有者必须与收信进程的所有者相同,或是超级用户

可用信号有着不同的名称,且映射到特定的数字。注意在不同的Unix实现中,数字和信号之间的映射关系可以不同。SIGTERM往往为15,而SIGKILL通常编为9。

示例

[编辑]

可通过以下四种方式发送SIGTERM信号(示例进程ID为“1234”):

kill 1234
kill -s TERM 1234
kill -TERM 1234
kill -15 1234

可通过三种方式发送SIGKILL信号:

kill -s KILL 1234
kill -KILL 1234
kill -9 1234

其它有用的信号包括HUP、TRAP、INT、SEGV及ALRM。HUP发送SIGHUP信号。一些守护程序,包括ApacheSendmail的,在接收到SIGHUP时重新读取配置文件,因此可用kill命令执行这个功能。在大多数Unix外壳中,只需按下CTRL+C便可以产生SIGINT信号。CTRL+Z也常映射至SIGTSTP,CTRL+\(反斜杠)映射至SIGQUIT,这可强制程序进行核心转储

相关程序

[编辑]
  • killall - 一些Unix变种如Solaris,在关机时会自动调用该实用程序。它的功能类似上面的kill命令,但不是向单个进程发送信号,而是发送到系统中的所有进程。然而在其它的操作系统中,如IRIXLinuxFreeBSD,允许通过参数指定要杀死的进程名称。例如,为了杀死一个进程,如XMMS音乐播放器调用的一个xmms实例,用户可以运行命令killall xmms。这将杀死所有名为xmms的进程,在Solaris系统上等同于kill `pidof xmms`
  • pkill - 根据名称和其他属性向进程发送信号。它最早出现在Solaris 7中,之后又重新为Linux、NetBSDOpenBSD实现。pkill使得基于名称杀死进程更加方便:如,要杀死名为firefox的进程,若不使用pkill(及pgrep),必须键入kill `ps --no-headers -C firefox -o pid`,而有pkill,只需pkill firefox
  • xkill - 如果不带任何参数调用,滑鼠光标将从箭头变为“x”图标,用户可以单击一个窗口,强制X伺服器关闭与该窗口客户端的连接。这往往会导致进程在检测到它与X伺服器的连接已关闭后终止。

Microsoft Windows

[编辑]

在微软的命令行解释器Windows PowerShell中,预定义的kill是一个Stop-Process cmdlet的命令别名

Microsoft Windows XPVista7中附带了taskkill命令[4]以终止进程。常见用法为taskkill /im "IMAGENAME"。在Microsoft Windows提供给Windows 98资源工具包中有一个“不受支持”的kill版本[5]

GNU版的kill已通过Cygwin移植,并可以运行在Microsoft Windows Services for UNIX的Unix子环境中(微软于1999年9月17日通过购买Softway Systems及其Interix产品获得了Windows Services for UNIX)。[6]

示例

[编辑]

寻找并杀死所有以字母“P”开头、由微软开发、使用内存超过10 MB的进程:

PS C:\>ps p* | where { $_.Company -like "Microsoft*" -and $_.WorkingSet -gt 10MB } | kill -confirm

Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "powershell (6832)".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): A
PS C:\>

下面是一个简单的例子,它要求explorer.exe进程终止:

PS C:\>taskkill /im explorer.exe

强制终止进程:

PS C:\>taskkill /f /im explorer.exe

还可按PID号杀死进程,如下所示:

PS C:\>taskkill /pid 3475

Microsoft Singularity

[编辑]

微软研究院微内核操作系统Singularity的标准外壳Singularity shell包含用以终止后台进程的kill命令。

示例

[编辑]

停止名为“SampleProcess”的进程:

Singularity>kill SampleProcess

停止进程标识符为“42”的进程:

Singularity>kill 42

贝尔实验室九号计划

[编辑]

贝尔实验室九号项目,kill程序不实际执行终止操作,也不需要给予进程ID。相反,它需要进程的实际名称,并输出为rc(九号计划所使用的壳层)的命令来杀死进程。[7]

有一个类似命令slay执行类似操作,但是用于拒绝被这样杀死的进程。[7]

示例

[编辑]

杀死所有troff的实例:

kill troff | rc

参见

[编辑]

参考

[编辑]
  1. ^ Bash Reference Manual: Job Control Builtins. The GNU Project. [2015-02-24]. (原始内容存档于2019-09-18). 
  2. ^ zsh: 17. Shell Builtin Commands. [2015-02-24]. (原始内容存档于2019-09-18). 
  3. ^ <signal.h>. The Open Group Base Specifications Issue 7. [2015-02-24]. (原始内容存档于2020-12-19). 
  4. ^ Taskkill. Microsoft TechNet. [2015-02-24]. (原始内容存档于2018-02-03). 
  5. ^ Resource Kit Utilities - Windows '98 Resource Kit. ActiveXperts Software. [2015-02-24]. (原始内容存档于2019-05-25). 
  6. ^ GNU utilities for Win32. [2015-02-24]. (原始内容存档于2006-02-09). 
  7. ^ 7.0 7.1 UNIX to Plan 9 command translation. Plan 9 wiki. [2015-02-24]. (原始内容存档于2008-09-05). 

外部链接

[编辑]
{{bottomLinkPreText}} {{bottomLinkText}}
kill (命令)
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?