Kill 명령과 함께 -exec 사용

Kill 명령과 함께 -exec 사용

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구현 의 경우 다음과 같이 출력됩니다.killzsh

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다음과 같습니다.bashkill

$ 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

관련 정보