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

질문

  • 왜?신호 목록kill, killallpkill동일하지 않습니까?

나는 동일한 출력을 가정 pkill하고 표시해야 합니다 . 언뜻 보면 신호가 지원되지 않는 것 같습니다.killallkill -lpkill

환경:

Ubuntu Server 18:04, 20:04 및 Fedora Workstation 36에서 이 문제가 발생했습니다.

답변1

kill, killall 및 pkill의 신호 목록이 다른 이유는 무엇입니까?

아마도 다른 사고방식을 가진 다른 시간에 다른 사람들이 다른 방식으로 구현했기 때문일 것입니다.

--signal모든 명령 에는 어떤 인라인 도움말이나 매뉴얼 페이지가 수동으로 작성되었는지에 관계없이 커널이 보낼 수 있는 신호를 지정하는 일종의 인수 형식이 있다는 점에 유의해야 합니다 . 항상 그렇듯이 man command사용법, 호출 및 옵션에 대한 자세한 내용은 명령 문서(일반적으로 설명서에 있음)를 참조하세요 . 자세한 내용은 설명서의 섹션 7을 확인하세요.킬 신호 목록예를 들어.

답변2

귀하가 언급한 프로그램( kill, killallpkill)은 작성자가 다를 가능성이 높습니다. 각 작성자는 사용자에게 도움을 제공하는 방법을 결정합니다. 동일한 명령줄, 동일한 옵션을 가질 것으로 기대할 수는 없습니다.

저를 포함한 일부 사람들은 잘못된 명령을 입력하는 것을 피하기 위해 현재 사용하고 있는 운영 체제의 매뉴얼 페이지를 읽는다는 점을 명심해야 합니다. :) 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 미만의 신호보다 덜 사용됩니다.

관련 정보