POLL 신호를 사용한 적이 없지만 프로세스를 비정상적으로 종료하는 기본 동작이 포함된 신호로 나열됩니다.
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html
"구식"으로 표시되어 있으므로 POSIX 호환 응용 프로그램에서는 이를 사용하면 안 됩니다.
bash(5.0.17) 또는 dash(0.5.10)에서 이와 같은 신호를 잡으려고 하면 오류가 발생한다는 것을 발견했습니다.
트랩: 설문조사: 나쁜 트랩
이로 인해 쉘이 POSIX와 호환되지 않습니까?
PS 동일한 시스템에서 lksh(Ubuntu Linux 20.04의 mksh 패키지 버전 58-1)로 테스트되었습니다.
#!/bin/lksh
sub() {
trap 'echo sub SIGPOLL; trap - POLL; exit' POLL
sleep 3 &
wait $!
return 0
}
sub &
pid=$!
sleep 1
kill -s POLL -- $pid
wait $pid
echo $?
trap 'echo SIGPOLL; trap - POLL; kill -s POLL -- $$' POLL
kill -s POLL -- $$
echo not here
산출
sub SIGPOLL
157
SIGPOLL
I/O possible
답변1
아니요, 이 점에서는 두 껍질 모두 동일합니다.
불다SIGPOLL 지원 여부 그것을 가지고 있는 시스템에서,대시처럼:
#if defined (SIGPOLL) /* Pollable event (for streams) */ signal_names[SIGPOLL] = "SIGPOLL"; #endif
시스템에 없으면 시스템 자체가 규격을 준수하지 않을 수도 있지만 잡을 수 있는 것은 없습니다.
이를 증명하는 주장이 있다trap
필수명명된 모든 신호를 지원합니다.테이블에따라서 자체적으로 사양을 준수하지 않는 시스템에서도(적합성은 시스템 수준에서 정의되지만) SIGPOLL을 포착하려는 시도는 오류가 아니라 무작동이어야 합니다.
그러나 SIGPOLL은반품의 일부로 나열됨XSI 스트리밍 기능(XSR)은 선택 사항이므로 해당 기능을 사용하는 스크립트는 XSI 스트림을 지원하는 다른 시스템으로만 이식될 수 있습니다. 이러한 시스템에는 POLL 신호도 포함되어 있으므로 포탄도 이 신호를 수신합니다.
이것은 일관된 행동입니다.