シグナルハンドラー内から、シグナルが処理されたときにそのように行われているシステムコールを条件付きで中断する方法を探しています。これを具体的にするために、 への呼び出しread
が処理中で、SIGRT0
受信されたとします。このシグナルハンドラはSA_RESTART
システムコールを無条件に割り込ませたくないので使っていますが、条件によってはシグナルハンドラが戻ってきたらすぐread
に返してもらいたいです。EINTR
これを行う 1 つの方法は、 の別のシグナル ハンドラーを設定し、 のハンドラーのシグナル マスクをSIGRT1
入れて、ハンドラーから除外することです。次に、canのハンドラーがあり、最初の中断しないシグナルハンドラーが戻ると、2番目のハンドラーが起動して中断されます。SIGRT1
SIGRT0
SA_RESTART
SIGRT1
SIGRT0
raise
SIGRT1
read
このソリューションの問題点は、他のプロセスが を送信SIGRT1
して、不要なEINTR
発生を引き起こす可能性があることです。
私が探している結果を達成する方法はありますか?