这三个命令都是用于杀掉进程的,不同的是,kill是杀掉单个进程,killall是杀掉所有同名进程,pkill是杀掉一类进程或者某个用户的所有进程。

1. kill 命令

kill 命令很容易让人产生误解,以为它仅仅就是用来杀死进程的。我们来看一下 man page 对它的解释:kill - send a signal to a process. 从官方的解释不难看出,kill 是向进程发送信号的命令。当然我们可以向进程发送一个终止运行的信号,此时的 kill 命令才是名至实归。事实上如果我们不给 kill 命令传递信号参数,它默认传递终止进程运行的信号给进程!这是 kill 命令最主要的用法。

一般情况下,终止一个前台进程使用 Ctrl + C 就可以了。对于一个后台进程就得用 kill 命令来终止。我们会先使用 ps、top 等命令获得进程的 PID,然后使用 kill 命令来杀掉该进程。

$ kill -l        // 列出所有可用的信号
...
1) SIGHUP        // 重新加载进程
9) SIGKILL       // 杀死进程
15) SIGTERM      // 完美地停止一个进程
...


kill PID-NUMBER         // 等同于 kill -15 PID-NUMBER
kill -15 PID-NUMBER     // 等完美停止一个进程
kill -9 PID-NUMBER      // 直接杀死进程

## 搜索 mysql 进程获取 pid 并 kill(使用的三种示例)
$ pgrep mysql | xargs kill -s 9
$ ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9
$ kill -s 9 `pgrep mysql

使用信号 15 是安全的,而信号 9 则是处理异常进程的最后手段,这样结束掉的进程不会进行资源的清理工作。

2. killall 命令

killall 用于杀死进程,与 kill 不同的是 killall 会杀死指定名字的所有进程。kill 命令杀死指定进程 PID,需要配合 ps 使用,而 killall 直接对进程对名字进行操作,更加方便。

kill -9 PROCESS-NAME

killall -9 mysql        // 结束所有的 mysql 进程

3. pkill 命令

pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程,除此之外,pkill 还有一个更重要的功能,即按照终端号来踢出用户登录。

$ pkill mysql          // 结束 mysql 进程
$ pkill -u jack,test   // 结束jack,test用户的所有进程
$ w                    // 使用w命令查询本机已经登录的用户
$ pkill -9 -t pts/1    // 强制杀死从pts/1虚拟终端登陆的进程
作者:jackzang  创建时间:2024-05-20 09:29
最后编辑:jackzang  更新时间:2024-09-12 16:37