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

打开另外一个终端执行下列操作。

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:~$
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
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 用户可终止所有进程。

练习:

  1. 打开一个终端,在终端内输入命令 sleep 1000,此 sleep 命令会运行 1000 秒或才能退出并放弃终端终端。
  2. 打开另外一个终端,在终端内输入命令 ps -C sleep 查看 sleep 命令对应的 PID。
  3. 在终端内,输入 kill <你在上一步查看到的PID> 终止 sleep 的运行。
  4. 回到第一个终端,看 sleep 1000 命令是否被终止。