POSIXシェルはSIGPOLLシグナルをサポートする必要がありますか?

POSIXシェルはSIGPOLLシグナルをサポートする必要がありますか?

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

これは一貫した行動です。

おすすめ記事