概述

在Linux中,kill命令用于终止指定进程的运行,是常用的进程管理命令。通常情况下,可以通过Ctrl+C键终止前台进程,但对于后台进程,则需要使用kill命令来结束进程。在使用kill命令之前,需要使用pspidofpstreetop等工具获取进程的PID,然后使用kill命令来终止该进程。

kill命令通过向进程发送特定信号来结束相应的进程。默认情况下,使用编号为15的TERM信号。TERM信号将终止所有无法捕获该信号的进程。对于那些可以捕获该信号的进程,则需要使用编号为9的KILL信号来强制终止进程。

命令格式和功能

命令格式: kill [options] [PID]

命令功能:向指定进程发送特定信号。如果不指定信号编号参数,默认发送SIGTERM(信号编号为15)终止指定进程。如果仍无法终止该程序,可以使用-KILL参数,其发送的信号为SIGKILL(信号编号为9),将强制结束进程。可以使用ps命令或者jobs命令查看进程号。root用户可以控制其他用户的进程,非root用户只能终止自己的进程。

命令参数

  • -l:信号。若不加信号编号参数,则使用-l参数列出全部信号名称。
  • -a:当处理当前进程时,不限制命令名和进程号的对应关系。
  • -p:指定kill命令只打印相关进程的进程号,而不发送任何信号。
  • -s:指定发送信号。
  • -u:指定用户。

注意事项

  • kill命令可以带有信号编号选项,也可以不带。如果没有信号编号,kill命令会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。
  • 只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。
  • 发送信号时需要小心,只有在万不得已的情况下才使用kill信号9,因为进程不能首先捕获它。
  • 使用kill 0可以撤销所有的后台作业,终止所有由当前shell启动的进程。
  • 信号强制终止进程可能会带来副作用,如数据丢失或终端无法恢复到正常状态。
  • kill成功发送信号后,shell会在屏幕上显示进程的终止信息。有时这个信息不会立即显示,只有在按下Enter键使shell的命令提示符再次出现时,才会显示出来。

使用示例

  • 列出所有信号名称:kill -l
  • 获取指定信号的数值:kill -l KILLkill -l TERM
  • 通过ps查找进程,然后用kill杀掉:ps -ef | grep 'program'kill PID
  • 无条件彻底杀死进程:kill –9 PID
  • 杀死指定用户的所有进程:kill -9 $(ps -ef | grep username)kill -u username
  • init进程是无法终止的:kill –9 1

注意事项

init是Linux系统中不可缺少的程序之一,它是一个由内核启动的用户级进程。在内核启动后(已载入内存、开始运行并初始化所有设备驱动程序和数据结构等),通过启动一个用户级程序init来完成引导进程。因此,init始终是第一个进程,其进程编号始终为1。其他所有进程都是init进程的子进程,无法终止init进程。

注意,以上命令会强制终止指定进程,可能会导致数据丢失或终端无法恢复到正常状态。使用kill命令时需要谨慎操作,只有在确实必要的情况下才使用强制终止信号9。因为init进程是系统必需的进程,它负责引导和管理其他进程,所以无法通过kill命令终止init进程。

最后修改:2023 年 07 月 19 日
如果觉得我的文章对你有用,请随意赞赏