在Linux中终止进程或在UNIX/Linux系统中终止进程

时间:2020-01-09 10:41:08  来源:igfitidea点击:

如何使用命令行选项在基于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。