終止進程

KILL 命令

其實佢係一個畀進程發信號嘅工具,唔一定係殺進程。

man kill
kill - send a signal to a process

默認信號

kill 命令嘅默認信號係 SIGTERM,對應數字 15,優雅終止。

列出可用信號

kill -l
 1) SIGHUP    2) SIGINT    3) SIGQUIT   4) SIGILL    5) SIGTRAP
 6) SIGABRT   7) SIGBUS    8) SIGFPE    9) SIGKILL  10) SIGUSR1
11) SIGSEGV  12) SIGUSR2  13) SIGPIPE  14) SIGALRM  15) SIGTERM
......

kill -l 9 15
KILL
TERM

指定信號類型

kill -s SIGKILL <PID>
kill -9 <PID>

發畀多個進程

kill -15 <PID> <PID> <PID>

特殊進程號 -1

-1 進程號表示所有進程,以下命令會終止你(當前用戶)能終止嘅所有進程。

危險

唔好喺 root 用戶執行

kill -9 -1

假如我想喺 kuga 用戶執行,可以先喺 root 用戶睇下該用戶嘅進程。

ps -fu kuga
UID          PID    PPID  C STIME TTY          TIME CMD
kuga       42994       1  0 14:13 ?        00:00:00 /lib/systemd/systemd --user
kuga       42995   42994  0 14:13 ?        00:00:00 (sd-pam)
kuga       43056   42991  0 14:13 ?        00:00:00 sshd: kuga@pts/0
kuga       43057   43056  0 14:13 pts/0    00:00:00 -bash

然後再到 kuga 終端執行命令 kill -9 -1

Connection to x.x.x.x closed by remote host.
Connection to x.x.x.x closed.

會即刻斷開連接,喺 root 上睇 kuga 用戶進程會發現全冇咗。

PKILL 命令

通過進程嘅名稱嚟搵並發信號畀匹配嘅進程。

man pkill
signal for processes based on name and other attributes

默認信號

pkill 命令嘅默認信號係 SIGTERM,對應數字 15,優雅終止。

指定信號類型

pkill -SIGKILL bash
pkill -9 bash

指定用戶進程

pkill -u kuga
pkill -9 -u kuga bash

精確匹配進程名稱

pkill -x sshd

PGREP

通過進程嘅名稱嚟搵進程 ID。

man pgrep
look up for processes based on name and other attributes 

忽略大小寫

pgrep -i BASH

指定用戶進程

pgrep -u kuga
44087
44088
44149
44150

列出進程 ID 和名稱

沒有 -l 就只會顯示進程 ID。

pgrep -l bash
42977 bash
44150 bash

列出匹配進程嘅數量

pgrep -c bash
2

指定父進程 ID

pgrep -P 1729
42912
44084

最近啟動嘅進程

pgrep -n -l
pgrep -n bash -l

最早啟動嘅進程

pgrep -o -l
1 systemd

精確匹配進程名稱

pgrep -x sshd

常用信號

SIGTERM - 15

請求進程終止。這個信號係「友好」嘅終止請求,進程可以捕捉到這個信號並執行清理工作,然後退出。 它係 killpkill 命令嘅默認信號。 通常用於優雅地終止進程,畀進程時間來處理未完成嘅任務。

SIGKILL - 9

強制終止進程。此信號唔能被進程捕捉、阻塞或忽略,進程會立即被終止。 發送 SIGKILL 會直接停止進程,唔允許進程進行任何清理操作。 用於無法正常終止嘅進程,當 SIGTERM 無效時使用。

SIGINT - 2

中斷信號,通常由用戶通過 Ctrl+C 發送,用於中斷前台運行嘅進程。 用於手動中斷進程,尤其是交互式進程。

SIGQUIT - 3

退出信號,通常由用戶通過 Ctrl+\ 發送,表示希望進程生成核心轉儲(core dump)並退出。 用於調試,當希望進程生成核心轉儲以便分析問題時使用。

SIGHUP - 1

掛起信號,通常表示終端或控制台斷開連接。 許多守護進程在接收到 SIGHUP 信號時,會重新加載其配置文件。 用於重新加載守護進程嘅配置,或讓守護進程重啟。