kill、killall、pkillのシグナルリストが異なるのはなぜですか?

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

質問

  • なぜ?信号リストなぜkillkillallpkill同じではありませんか?

私は同じ出力を仮定しpkillて表示する必要があります。一見すると、信号がサポートされていないようです。killallkill -lpkill

環境:

Ubuntu Server 18:04、20:04、およびFedora Workstation 36でこの問題が発生しました。

答え1

kill、killall、pkillのシグナルリストが異なるのはなぜですか?

おそらく、異なる考え方を持つ別の時間に、他の人が異なる方法で実装したからです。

--signalすべてのコマンドには、どのインラインヘルプまたはマニュアルページが手動で作成されたかに関係なく、カーネルが送信できるシグナルを指定する一種の引数形式があることに注意してください。いつものように、man command使用法、呼び出し、およびオプションの詳細については、コマンドドキュメント(一般的にはマニュアルに記載されています)を参照してください。詳細については、マニュアルのセクション7を参照してください。キル信号リスト例えば。

答え2

あなたが言及したプログラム(kill、、killallおよびpkill)は作成者によって異なる可能性があります。各作成者は、ユーザーに支援を提供する方法を決定します。同じコマンドライン、同じオプションを持つことは期待できません。

私を含む一部の人々は、誤ったコマンドを入力するのを避けるために、現在使用しているオペレーティングシステムのマニュアルページを読むことに留意する必要があります。 :) Linux、Solaris、AIX のマニュアルページを読んでkillall驚くことでしょう。

答え3

このkillプログラムはkillall同じ信号セットを表示します。

$ /bin/kill -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
$ 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それ自体はシェルに組み込まれています。pkill信号のリストは表示されません。

組み込みは、互いに同義語またはkillを表す29番を除いて、31番の信号まで同じ信号を表示します。SIGIOSIGPOLL

31以上の信号はライブ信号であり、そのうちのいくつかはスレッドノッチであるが、「異なって」、一般に31未満の信号よりも少ない使用である。

関連情報