Linux

為什麼 kill、killall 和 pkill 的信號列表不一樣?

  • May 17, 2022

我研究了kill,pkillkillall命令,我理解了它們的大部分區別。但是,我對他們的信號感到困惑:

如果我執行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

但是pkill -l給出:

pkill: invalid option -- 'l'

Usage:
pkill [options] <pattern>

Options:
-<sig>, --signal <sig>    signal to send (either number or name)
-e, --echo                display what is killed
-c, --count               count of matching processes
-f, --full                use full process name to match
-g, --pgroup <PGID,...>   match listed process group IDs
-G, --group <GID,...>     match real group IDs
-i, --ignore-case         match case insensitively
-n, --newest              select most recently started
-o, --oldest              select least recently started
-P, --parent <PPID,...>   match only child processes of the given parent
-s, --session <SID,...>   match session IDs
-t, --terminal <tty,...>  match by controlling terminal
-u, --euid <ID,...>       match by effective IDs
-U, --uid <ID,...>        match by real IDs
-x, --exact               match exactly with the command name
-F, --pidfile <file>      read PIDs from file
-L, --logpidfile          fail if PID file is not locked
--ns <PID>                match the processes that belong to the same
                          namespace as <pid>
--nslist <ns,...>         list which namespaces will be considered for
                          the --ns option.
                          Available namespaces: ipc, mnt, net, pid, user, uts

-h, --help     display this help and exit
-V, --version  output version information and exit

For more details see pgrep(1).

即使沒有信號列表,此命令也支持/使用信號,只需在前面出現的輸出中查看

-<sig>, --signal <sig>    signal to send (either number or name)

最後,killall -l返回:

HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS

問題

  • 為什麼 和 的信號列表kill一樣?killall``pkill

我假設pkill並且killall應該顯示相同的輸出kill -l- 乍一看,它似乎pkill不支持信號。

環境:

對於 Ubuntu Server 18:04、20:04 和 Fedora Workstation 36,我遇到了這種情況

為什麼 kill、killall 和 pkill 的信號列表不一樣?

很可能是因為它們在不同的時間、不同的人以不同的方式實施。

您應該注意,所有命令都有某種形式的--signal參數,可以指定核心能夠發送的任何信號,無論內聯幫助或手冊頁可能手動寫入其中的信號。與往常一樣,請查閱命令的文件(通常在手冊中提供man command)以獲取有關其用法、呼叫和選項的詳細資訊。您還可以查看手冊的第 7 節以了解詳細資訊 - 例如,請參閱終止信號列表

引用自:https://unix.stackexchange.com/questions/702796