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信号も含まれているため、シェルもこの信号を受信します。
これは一貫した行動です。