Kill 및 exec 명령을 사용하는 다음 명령을 실행하려고 합니다.
kill -l -exec grep -i 'term' {} +
kill -l은 모든 종료 신호 목록을 반환하므로 대소문자를 구분하지 않는 -i 플래그와 함께 grep을 사용하여 "term"이라는 단어가 포함된 모든 신호를 찾고 싶습니다.. 그러나 다음 오류를 반환합니다. 왜 이런 일이 발생하는지 제안할 수 있는 사람이 있나요?
-bash: kill: grep: invalid signal specification
-bash: kill: -i: invalid signal specification
15
-bash: kill: {}: invalid signal specification
-bash: kill: +: invalid signal specification
답변1
-exec cmd {} +
find
명령과 별도의 명령에 대한 관용어입니다 find
. cmd
소유한 파일을 실행하는 데 사용됩니다 .확립된매개변수로. -exec
가지다아니요흔히 불리는 옵션술부표현식에 대한 조건 및 작업 체인을 형성하는 데 사용됩니다 find
( find
검색을 시작해야 하는 파일/디렉터리 목록 앞에 전달된 옵션도 지원됩니다).
kill
프로세스 ID 또는 그들이 속한 쉘 작업을 기반으로 프로세스에 신호를 보내기 위해 대부분의 쉘에 내장된 명령입니다.
-l
대부분의 구현은 구현마다 다른 형식으로 보낼 수 있는 신호를 나열하는 옵션 도 지원합니다 . 일부는 한 줄에 하나의 신호를 나열하고, 일부는 열별로 나열하고, 일부는 공백으로 구분하고, 일부는 신호 이름과 번호도 포함합니다.
옵션 외에 -l
신호 이름이나 숫자( SIG
일부 구현에서는 접두사가 있거나 없음)를 전달하는 경우 일부 kill
구현에서는 해당 신호 번호/이름을 출력하지만 일부 구현에서는 항상 이름을 인쇄하고 일부 구현에서는 숫자만 허용합니다.
그래서:
kill -l TERM
예를 들어, 쉘 내장 기능을 포함한 일부 kill
구현 의 경우 다음과 같이 출력됩니다.kill
zsh
15
15
전부는 아니지만 대부분의 시스템에서 SIGTERM의 실제 값은 무엇입니까?
zsh
셸 에서 신호 이름( + EXIT 에서도 사용됨)을 특수 배열에 사용할 trap
수도 있습니다 .$signals
$ echo $signals
EXIT 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 ZERR DEBUG
주어진 신호의 신호 번호는 배열의 인덱스에서 1을 뺀 값입니다.
$ echo $signals[15+1]
TERM
$ echo $(( signals[(I)TERM] - 1 ))
15
또는 대소문자를 구분하지 않는 일치의 경우:
$ set -o extendedglob
$ echo $(( signals[(I)(#i)term] - 1 ))
15
( kill -l term
많은 구현에서도 유효합니다 kill
).
답변2
이 옵션을 사용하면 POSIX 모드가 아닐 때 내장 명령의 출력은 -l
다음과 같습니다.bash
kill
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE
9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG
17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD
21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGINFO 30) SIGUSR1 31) SIGUSR2
각 쌍을 number) signal
그룹화 할 수 있습니다.xargs -n 2
따라서 이는 귀하의 요구 사항을 충족해야 합니다.
kill -l | xargs -n 2 | grep -i term