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 미만의 신호보다 덜 사용됩니다.