kill

發送信號到進程。

目錄

內建命令

概要

1kill [-s sigspec | -n signum | -sigspec] pid | jobspec ...
2kill -l [sigspec]

主要用途

  • 發送信號到作業或進程(可以爲多個)。
  • 列出信號。

選項

1-s sig    信號名稱。
2-n sig    信號名稱對應的數字。
3-l        列出信號名稱。如果在該選項後提供了數字那麼假設它是信號名稱對應的數字。
4-L        等價於-l選項。

參數

pid:進程ID

jobspec:作業標識符

返回值

返回狀態爲成功除非給出了非法選項、執行出現錯誤。

例子

 1[user2@pc] kill -l 9
 2KILL
 3
 4# 列出所有信號名稱:
 5[user2@pc] kill -l
 6 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 7 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 8 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
 913) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
1017) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
1121) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
1225) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
1329) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
1435) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
1539) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
1643) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
1747) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
1851) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
1955) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
2059) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
2163) SIGRTMAX-1  64) SIGRTMAX
22
23# 下面是常用的信號。
24# 只有第9種信號(SIGKILL)纔可以無條件終止進程,其他信號進程都有權利忽略。
25
26HUP     1    終端掛斷
27INT     2    中斷(同 Ctrl + C)
28QUIT    3    退出(同 Ctrl + \)
29KILL    9    強制終止
30TERM   15    終止
31CONT   18    繼續(與STOP相反,fg/bg命令)
32STOP   19    暫停(同 Ctrl + Z)
 1# 以下發送KILL信號的形式等價。當然還有更多的等價形式,在此不一一列舉了。
 2[user2@pc] kill -s SIGKILL PID
 3[user2@pc] kill -s KILL PID
 4[user2@pc] kill -n 9 PID
 5[user2@pc] kill -9 PID
 6
 7[user2@pc] sleep 90 &
 8[1] 178420
 9
10# 終止作業標識符爲1的作業。
11[user2@pc] kill -9 %1
12
13[user2@pc] jobs -l
14[1]+ 178420 KILLED                  ssh 192.168.1.4
15
16[user2@pc] sleep 90 &
17[1] 181357
18
19# 發送停止信號。
20[user2@pc] kill -s STOP 181357
21
22[user2@pc] jobs -l
23[1]+ 181537 Stopped (signal)        sleep 90
24
25# 發送繼續信號。
26[user2@pc] kill -s CONT 181357
27
28[user2@pc] jobs -l
29[1]+ 181537 Running                 sleep 90 &

注意

  1. bash的作業控制命令包括bg fg kill wait disown suspend
  2. 該命令是bash內建命令,相關的幫助信息請查看help命令。

外部命令

概要

1kill [-signal|-s signal|-p] [-q value] [-a] [--] pid|name...
2kill -l [number] | -L

主要用途

  • 發送信號到進程(可以爲多個)。

  • 列出信號。

選項

 1-s, --signal signal    要發送的信號,可能是信號名稱或信號對應的數字。
 2-l, --list [number]    打印信號名稱或轉換給定數字到信號名稱。信號名稱可參考文件(/usr/include/linux/signal.h)。
 3-L, --table            和'-l'選項類似,但是輸出信號名稱以及信號對應的數字。
 4-a, --all              不要限制“命令名到pid”的轉換爲具有與當前進程相同的UID的進程。
 5-p, --pid              打印目標進程的PID而不發送信號。
 6--verbose              打印信號以及接收信號的PID。
 7-q, --queue value      使用sigqueue(3)而不是kill(2)。參數value是信號對應的數字。
 8                           如果接收進程已爲此信號安裝了處理程序將SA_SIGINFO標記爲sigaction(2),則可以獲取
 9                           該數據通過siginfo_t結構的si_sigval字段。
10--help                 顯示幫助信息並退出。
11--version              顯示版本信息並退出。

參數

接收信號的進程列表可以是PID以及name的混合組成。

PID:每一個PID可以是以下四種情況之一:

狀態 說明
n 當n大於0時,PID爲n的進程接收信號。
0 當前進程組中的所有進程均接收信號。
-1 PID大於1的所有進程均接收信號。
-n 當n大於1時,進程組n中的所有進程接收信號。當給出了一個參數的形式爲“-n”,想要讓它表示一個進程組,那麼必須首先指定一個信號,或參數前必須有一個“--”選項,否則它將被視爲發送的信號。

name:使用此名稱調用的所有進程將接收信號。

例子

1> sleep 20 &
2
3# 列出對應的PID。
4> kill -p sleep
523021

返回值

  • 0 成功。
  • 1 失敗。
  • 64 部分成功(當指定了多個進程時)。

注意

  1. 該命令是GNU coreutils包中的命令,相關的幫助信息請查看man -s 1 killinfo coreutils 'kill invocation'
  2. 啓動或關閉內建命令請查看enable命令,關於同名優先級的問題請查看builtin命令的例子部分的相關討論。
  3. kill命令類似的有xkillpkill,killall等,用於不同的目的和場景。

參考鏈接

發送信號到進程

來源:https://github.com/jaywcjlove/linux-command

最後修改於: Wednesday, January 31, 2024

相關文章:

翻譯: