5. kill 命令
kill 命令
在 Linux 系统中,kill 命令用于向运行中的进程发送信号(signal),以控制进程的行为(如终止、停止、恢复等)。
它的作用是向另外一个进程发送信号(通过进程 ID 确定目标进程),默认情况下会发送 SIGTERM(15)信号来结束进程。
命令格式
kill [选型] 进程ID(PID)
常用选项
选项
说明
-<信号名字> 或 -s <信号名字>给出发送信号的名字。
-<信号值> 或 -n <信号值>给出发送信号的名字。
-l列出所有信号。
示例
如:运行上一节我们写的一个 Python 程序 always_run.py,内容如下:
import os
print("PID:", os.getpid())
while True:
pass
运行 always_run.py 程序
weimingze@mzstudio:~$ python3 always_run.py
PID: 8553
打开另外一个终端执行下列操作。
- 向进程ID 为 8553 的进程发送值为 20(SIGTSTP) 的信号。
weimingze@mzstudio:~$ ps -l -C python3
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 R 1000 8553 5889 98 80 0 - 7336 - pts/0 00:02:08 python3
weimingze@mzstudio:~$ kill -SIGTSTP 8553
weimingze@mzstudio:~$ ps -l -C python3
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 T 1000 8553 5889 93 80 0 - 7336 do_sig pts/0 00:02:39 python3
源终端显示
weimingze@mzstudio:~$ python3 always_run.py
PID: 8553
[1]+ Stopped python3 always_run.py
weimingze@mzstudio:~$
- 向进程ID 为 8553 的进程发送值为 18(SIGCONT) 的信号。
weimingze@mzstudio:~$ kill -18 8553
weimingze@mzstudio:~$ ps -l -C python3
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 R 1000 8553 5889 47 80 0 - 7336 - pts/0 00:02:46 python3
- 向进程ID 为 8553 的进程发送值为 9(SIGKILL) 的信号。
weimingze@mzstudio:~$ kill -9 8553
weimingze@mzstudio:~$ ps -l -C python3
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
-9 SIGKILL 信号
SIGKILL(值为 9) 的信号是杀死进程的信号,是比较常用的信号,通常我们用 kill -9 关闭一个 CPU 占用率比较高或可疑的进程。
SIGKILL 信号在进程收到此信号后也无法终止被关闭进程的命运。是一个可靠关闭进程的信号,但此信号可能会引起进程数据的丢失。
最好还是要正常退出进程。
权限
普通用户只能终止自己的进程,root 用户可终止所有进程。
练习:
- 打开一个终端,在终端内输入命令
sleep 1000,此 sleep 命令会运行 1000 秒或才能退出并放弃终端终端。 - 打开另外一个终端,在终端内输入命令
ps -C sleep查看 sleep 命令对应的 PID。 - 在终端内,输入
kill <你在上一步查看到的PID>终止 sleep 的运行。 - 回到第一个终端,看
sleep 1000命令是否被终止。