在Linux中终止进程或在UNIX/Linux系统中终止进程
如何使用命令行选项在基于Linux的服务器上终止进程?
如何杀死Unix上正在运行的进程?
类似Linux和Unix的操作系统带有" kill"命令,可以终止已停止或不需要的进程,而不必注销或重新启动服务器。
因此,这对于Linux系统的稳定性很重要。
kill命令将诸如KILL进程之类的指定信号发送到指定的进程或进程组。
如果未指定信号,则发送TERM信号。
请注意,kill命令可以作为现代shell内置功能的一部分内部提供,也可以位于/bin/kill的外部。
无论内部还是外部kill命令,用法和语法都保持相似。
常见的Linux或Unix TERM信号列表
Linux和类Unix操作系统支持以下列出的标准终止信号:
- SIGHUP(1)在控制终端或控制进程终止时检测到挂断。使用SIGHUP来"重新加载配置文件并打开/关闭日志"文件。
- SIGKILL(9)杀死信号使用SIGKILL作为终止进程的"最后手段"。它不会保存数据或清除进程。
- SIGTERM(15)终止信号。这是杀死进程的"默认和最安全的方法"。
kill和killall命令支持60多个信号。
但是,大多数用户只需要使用信号9或15。
要获取信号的完整列表,请执行:
kill -l
什么是PID?
Linux或Unix进程正在运行程序实例。
例如,如果您正在浏览Internet,则Firefox正在运行。
每次启动Firefox浏览器时,系统都会自动分配一个唯一的进程标识号(PID)。
在系统上创建PID后,会自动将其分配给每个进程。
要查找firefox或httpd进程的PID,请使用以下pidof命令:
pidof httpd pidof apache2 pidof firefox
或结合使用ps命令和grep命令/egrep命令:
ps aux | grep httpd ps aux | grep apache2 ps aux | grep firefox
查找正在运行的firefox程序和apache2服务器的进程ID(PID)。
pgrep命令
您也可以使用pgrep命令来查找进程ID(PID):
pgrep process pgrep firefox pgrep vim
如何从命令行杀死Linux中的进程
语法为:
kill -[signal] PID kill -15 PID kill -9 PID kill -SIGTERM PID kill [options] -SIGTERM PID
杀死进程需要什么Linux或Unix权限?
规则很简单:
- 您可以杀死自己的所有进程。
- 只有root用户可以杀死系统级进程。
- 只有root用户才能杀死其他用户启动的进程。
kill命令示例以杀死Linux上的进程
在此示例中,我将终止lighttpd服务器进程。
步骤1找出lighttpd的PID(进程ID)
使用ps或pidof命令找出任何程序的PID。
例如,如果进程名称为lighttpd,则可以使用以下任一命令获取进程ID:
pidof lighttpd
输出示例:
3486
或者
ps aux | grep lighttpd
输出示例:
lighttpd 3486 0.0 0.1 4248 1432 ? S Jul31 0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf lighttpd 3492 0.0 0.5 13752 3936 ? Ss Jul31 0:00 /usr/bin/php5-cg
步骤2使用PID终止进程
PID 3486被分配给lighttpd过程。
要终止lighttpd服务器,您需要按以下方式传递PID:
# kill 3486
或者
$ sudo kill 3486
这将终止PID为3486的进程。
如何验证该过程已消失/被杀死?
再次使用ps命令或pid命令或pgrep命令,如下所示:
$ ps aux | grep lighttpd $ pidof lighttpd $ pgrep lighttpd
关于发送更强的信号#9(SIGKILL)的说明
如果在kill命令中未指定信号,则默认发送信号15(SIGTERM)。
所以kill 3486
命令与以下命令相同:
# kill -15 3486 # kill -SIGTERM 3486
或者
$ sudo kill -15 3486 $ sudo kill -SIGTERM 3486
有时信号15不够。
例如,lighttpd可能不会由于打开的套接字而被信号#15杀死。
在这种情况下,进程(PID)3486将被强大的信号9杀死:
# kill -9 3486 # kill -SIGKILL 3486
或者
$ sudo kill -9 3486 $ sudo kill -SIGKILL 3486
其中:
- -9或-SIGKILL一种特殊的杀死信号,几乎可以保证用铁拳杀死该过程。
如何杀死两个或多个Linux PID?
语法如下:根据需要杀死两个或多个PID,可以在单个命令中使用它:
kill pid1 pid2 pid3 kill -15 pid1 pid2 pid3 kill -9 pid1 pid2 pid3 kill -9 3546 5557 4242
Killall命令
killall
是仅Linux命令。它可能在FreeBSD和其他类似Unix的系统(例如macOS)上可用,以按名称杀死进程。因此,无需使用pidof进程或ps aux |查找PID。 grep进程命令。不要在Solaris Unix操作系统上使用killall命令。语法为:
killall {Process-Name-Here} killall -9 {Process-Name-Here} killall -15 {Process-Name-Here}
要终止lighttpd服务器,请执行:
# killall -15 lighttpd
或者
# killall -9 lighttpd
要终止Firefox Web浏览器过程,请执行:
# killall -9 firefox-bin
如前所述,类似UNIX的系统上的killall命令可以执行其他操作。
它会杀死所有进程,而不仅仅是特定进程。
请勿在UNIX系统上使用killall。