shell 学习五十二天----删除进程 kill 命令
进程的控制与删除
使用 kill
命令可以终止进程。通常,终止一个前台进程可以使用 ctrl+C
键,但是对于一个后台进程就必须使用 kill
命令来终止,我们需要先使用 ps/pidof/pstree/top
等工具获取进程 PID,然后使用 kill
命令来杀掉进程。kill
命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为 15 的 TREM 信号。TERM 信号将终止所有不能获取该信号的进程。对于那些可以获取该信号的进程就要用编号为 9 的 kill 信号,强行 “杀掉” 该进程。
kill 命令详解
-
格式:
kill [参数] [进程号,也就是 PID]
-
功能:
发送指定的信号到相应进程。不指定型号将发送SIFTERM(15)
终止指定进程。如果无法终止该进程可以使用“-KILL”
参数,其发送的信号为SIGKILL(9)
,将强制结束进程,使用ps
命令或者jobs
命令可以查看进程号。root 用户将影响用户的进程,非 root 用户只能影响自己的进程。 - 参数
```参数
说明
-l(小写字母)
信号,如果不加信号的编号参数,则使用”-l” 参数会列出全部的信号名称
-a
当初李当前进程是,不限制命令名或进程号的对应关系
-p
指定 kill 命令只打印相关进程的进程号,而不发送任何信号
-s
指定发送信号
-u
指定用户
注意:
-
kill
命令可以带信号号码选项,也可以不带。如果没有信号好吗,kill
命令就会发出终止信号 (15),这个信号可以被进程捕获,是的进程在推出之前可以清理并释放资源。也可以用kill
向进程发送特定的信号。例如:kill -2 123
// 它的效果等同于在前台运行 PID 为 123 的进程同时按下Ctrl+C
键。但是,普通用户只能使用不带 signal 参数的kill
命令或最多使用 -9 信号。 -
kill
可以带有进程 ID 号作为参数。当用kill
想这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有撤销权限的进程或撤销一个不存在的进程,就会得到一个错误信息。 -
可以向多个进程发信号或终止它们。
-
当
kill
成功的发送了信号后,shell 会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter
键使 shell 的命令提示符再次出现时,才会显示出来。 - 应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失后者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,采用
kill
信号 (9),因为进程不能首先捕获它要撤销所有的后台作业,可以输入kill 0
。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的 PID 是件很麻烦的事。这时,使用kill 0
来终止所有当前 shell 启动的进程,是个有效的方法。
案例
案例 1:
```#kill -l // 列出所有的信号名称
在输出中,只有第 9 种信号 (SIGKILL) 才可以无条件终止进程,其他信号进程都有权利忽略。以下是常用的信号:
信号名称
编号
说明
HUP
1
终端断线
INT
2
中断 (同 Ctrl+C)
QUIT
3
退出 (同 Ctrl)
TERM
15
终止
KILL
9
强制终止
CONT
18
继续 (与 STOP 相反,fg/bg 命令)
STOP
19
暂停 (同 Ctrl+Z)
案例 2:得到指定信号的数值 (不区分大小写)
```\#kill -l term
15
\#kill -l kill
9
\#kill -l SIGKILL
案例 3:配合 ps 命令,使用 kill 杀掉进程
```#ps -ef | grep vim // 得到关于 vim 进程的 PID,比如得到的 PID 是 111
#kill 111 // 删除 vim 进程
案例 4:彻底杀死进程
`\#kill -9 111`
案例 5:杀死指定用户的所有进程
```\#kill -9 $(ps -ef| grep username) // 方法 1
\#kill -u username // 方法 2```
案例 6:init 进程 (PID 为 1) 是不可杀的
`\#kill -9 1`
这是因为 `init` 是 linux 系统中不可缺少的程序之一 。所谓的 `init` 进程,他是一个有内核启动的用户级进程。内核自行启动 (已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等) 之后,就通过启动一个用户级程序 `init` 的方式,完成引导进程。所以,`init` 时钟是第一个进程 (其进程编号始终为 1)。其他所有进程都是 `init` 进程的子孙。`init` 进程是不可杀死的。不够貌似 `init` 进程的作用正在被逐渐弱化。