Linux命令 kill - 發(fā)送信號到進程

2021-11-22 17:04 更新

kill

發(fā)送信號到進程

內(nèi)建命令

概要

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

主要用途

  • 發(fā)送信號到作業(yè)或進程(可以為多個)。
  • 列出信號。

選項

-s sig    信號名稱。
-n sig    信號名稱對應的數(shù)字。
-l        列出信號名稱。如果在該選項后提供了數(shù)字那么假設它是信號名稱對應的數(shù)字。
-L        等價于-l選項。

參數(shù)

pid:進程ID

jobspec:作業(yè)標識符

返回值

返回狀態(tài)為成功除非給出了非法選項、執(zhí)行出現(xiàn)錯誤。

例子

[user2@pc] kill -l 9
KILL

# 列出所有信號名稱:
[user2@pc] 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     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

# 下面是常用的信號。
# 只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權(quán)利忽略。

HUP     1    終端掛斷
INT     2    中斷(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
KILL    9    強制終止
TERM   15    終止
CONT   18    繼續(xù)(與STOP相反,fg/bg命令)
STOP   19    暫停(同 Ctrl + Z)
# 以下發(fā)送KILL信號的形式等價。當然還有更多的等價形式,在此不一一列舉了。
[user2@pc] kill -s SIGKILL PID
[user2@pc] kill -s KILL PID
[user2@pc] kill -n 9 PID
[user2@pc] kill -9 PID

[user2@pc] sleep 90 &
[1] 178420

# 終止作業(yè)標識符為1的作業(yè)。
[user2@pc] kill -9 %1

[user2@pc] jobs -l
[1]+ 178420 KILLED                  ssh 192.168.1.4

[user2@pc] sleep 90 &
[1] 181357

# 發(fā)送停止信號。
[user2@pc] kill -s STOP 181357

[user2@pc] jobs -l
[1]+ 181537 Stopped (signal)        sleep 90

# 發(fā)送繼續(xù)信號。
[user2@pc] kill -s CONT 181357

[user2@pc] jobs -l
[1]+ 181537 Running                 sleep 90 &

注意

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

外部命令

概要

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

主要用途

  • 發(fā)送信號到進程(可以為多個)。
  • 列出信號。

選項

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

參數(shù)

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

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

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

name:使用此名稱調(diào)用的所有進程將接收信號。

例子

> sleep 20 &

# 列出對應的PID。
> kill -p sleep
23021

返回值

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

注意

  1. 該命令是GNU coreutils包中的命令,相關的幫助信息請查看man -s 1 kill或info coreutils 'kill invocation'。
  2. 啟動或關閉內(nèi)建命令請查看enable命令,關于同名優(yōu)先級的問題請查看builtin命令的例子部分的相關討論。
  3. 與kill命令類似的有xkill,pkill,killall等,用于不同的目的和場景。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號