开发和运维,开发和测试基本上不分家。所以市面上存在很多的开发运维、运维开发、测试开发等岗位。如果你连 kill 命令都还不会,怎么好意思说你是一个合格的开发呢?

除了开发,工作或者生活当中,也存在着非常多的“异常程序”,它们可能因为 bug 导致锁死了。应用程序无法响应,所以我们就需要强制的结束掉它。kill 命令就是来干这件事情的。

如果某个应用行为失常,那么你很可能关闭不掉它。在 Windows 中有任务管理器可以强制的结束它,在 Linux(还有Mac),我们可以用一个"kill"命令强制终结它。

当我们执行一个"kill"命令,实际上是发送了一个信号给系统,让它去终结不正常的应用。目前 kill 命令总共有 60 个你可以使用的信号,但是基本上我们只需要知道 SIGTERM(15) 和 SIGKILL(9)。这两个是最常用的,其他常用的命令列表如下:

  • 1 HUP: hangup

  • 1 HUP: hangup

  • 1 HUP: hangup

  • 2 INIT: 相当于 Ctrl + c

  • 9 KILL

  • 15 TERM: Terminate (kill 的默认信号)

  • 18 CONT: Continue (从STOP信号中恢复)

  • 19 STOP: Stop

我们可以使用 kill -l 命令,列出整个 kill 信号的列表。

  • SIGTERM – 此信号请求一个进程停止运行。此信号是可以被忽略的。进程可以用一段时间来正常关闭,一个程序的正常关闭一般需要一段时间来保存进度并释放资源。换句话说,它不是强制停止。

  • SIGKILL – 此信号强制进程立刻停止运行。程序不能忽略此信号,而未保存的进度将会丢失。

使用 kill 的语法是:

默认信号(当没有指定的时候)是 SIGTERM。当它不起作用时,你可以使用下面的命令来强制 kill 掉一个进程:

最常用的命令是 kill -9,用法如下:

这里 -9 代表着 SIGKILL 信号。也就是前面那个信号列表中每个命令和信号前面的编号。

如果不知道应用的 PID,仅需要运行这个命令:

我们常用的是 ps ux|grep java。kill 命令还有几个兄弟命令,比如 PKill、Killall、xkill 等。

这些命令虽然简单,但是在生产环境中还是要慎用。一个失误可能会给公司带来几千万,甚至更高的损失!