Linux
為什麼 kill、killall 和 pkill 的信號列表不一樣?
我研究了
kill
,pkill
和killall
命令,我理解了它們的大部分區別。但是,我對他們的信號感到困惑:如果我執行
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 節以了解詳細資訊 - 例如,請參閱終止信號列表。