"kill -l"은 ZERR만 반환합니다.

"kill -l"은 ZERR만 반환합니다.

보내려고 하면 SIGQUIT다음과 같은 메시지가 나타납니다.

$ kill -s QUIT 4341      
kill: unknown signal: SIGQUIT
kill: type kill -l for a list of signals

나는 이것을 보고 놀랐다:

$ kill -l
ZERR

그래서 어떻게 든 kill모든 신호 이름을 알 수 없습니다. 이것이 우분투의 멋진 점입니다(예, 업그레이드할 시간입니다. 그러나 그것은 또 다른 질문입니다)

당연히 SIGQUIT숫자로만 보내는 것인데 3, kill신호 이름을 잊어버리는 원인이 무엇입니까?

UPD: 이것은 zsh입니다.

$ type kill     
kill is a shell builtin                
$ echo $ZSH_VERSION $ZSH_PATCHLEVEL                                                             
5.0.2 1.5778                           

잘 작동하는지 확인했으니 /bin/killzsh와 관련된 것임에 틀림없습니다.

답변1

이는 zsh 실행 파일이 빌드되는 방식에 문제가 있는 것 같습니다. 신호 목록은 컴파일 타임에 운영 체제에 의해 결정됩니다. 신호가 아닌 오류로 인한 종료를 나타내는 "거짓 신호"가 ZERR목록 끝에 추가됩니다. 빌드에서 운영 체제의 신호 목록이 비어 있습니다.

스테판 차젤라스(Stéphane Chazelas)가 범인을 식별하다,이것은최신 버전의 GCC 컴파일러와의 빌드 스크립트 비호환성이 이제 수정되었습니다.. 최신 버전의 zsh를 빌드하면 문제가 해결되어야 합니다. 그러나 Ubuntu artful에는 귀하의 버전보다 최신 버전인 zsh 5.2가 함께 제공됩니다. 이전 장기 지원 버전인 Ubuntu에도 5.1.1이 있습니다. 따라서 호환성 테스트를 위해 이전 버전이 필요하지 않은 한 자체 버전을 유지할 이유가 없습니다. 이 이전 버전을 반드시 유지해야 한다면 이전 버전의 GCC로 빌드하세요.

답변2

귀하의 쉘은 거의 확실하며 이를 별칭이나 함수로 정의했을 zsh수도 있습니다 ( 확인하는 데 사용 ).killtype kill

하지만 여전히 귀하의 상황을 재현할 수 없습니다.

zsh$ kill -l 30
PWR
zsh$ kill -l 31
SYS
zsh$ kill -l 32
32
zsh$ kill -l -96
32

32"ZERR"예, 신호 이름 테이블의 인덱스입니다 zsh. 그러나 볼 수 있듯이 (적어도 내 시스템에서는) 최대 신호 수( 31)로 올바르게 제한됩니다.

zsh귀하의 ( ) 및 운영 체제 ( ) echo $ZSH_VERSION $ZSH_PATCHLEVEL버전으로 질문을 업데이트 하십시오 uname -a. 나는 이것이 배포 포트에서 곪아터지는 나쁜 패치 중 하나라고 생각합니다(업스트림 개발자가 검토하지 않는 빠른 "수정").

고쳐 쓰다:

zshartful에서 패키지를 설치해 보세요 .저장소(버전 5.2.5) 또는 소스에서 최신 버전을 다시 컴파일하세요 zsh.

문제는 실제로 이전 버전의 버그로 인해 발생했습니다. zsh/(시스템 헤더 파일에 정의된 매크로 확장 전에 추가된 줄)에 의해 생성된 줄 표시, 혼란스러움gcccpp# lnum_of_definition "header.h" 3 4signames2.awk신호 및 숫자 목록을 생성하는 스크립트입니다. 스크립트를 수정한 것이 아니라 -P최신 cpp버전을 전달했다는 점에 유의하세요 zsh.

바라보다여기. 팁 @Stéphane Chazelas에 감사드립니다. 대본을 살펴봤지만 awk제 재능이 부족해서 몇 년 동안 바뀌지 않았기 때문에 그들이 범인이라고 생각하지 않습니다.

관련 정보