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でこの問題が発生しました。
答え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番の信号まで同じ信号を表示します。SIGIO
SIGPOLL
31以上の信号はライブ信号であり、そのうちのいくつかはスレッドノッチであるが、「異なって」、一般に31未満の信号よりも少ない使用である。