多くのシステム コールは EINTR
を報告します。 システムコールの進行中にシグナルが発生した場合のエラーコード。システムがシステム コールを自動的に再開できないため、実際にはエラーは発生しませんでした。このコーディング パターンは、これが発生したときにシステム コールを再試行するだけで、割り込みを無視します。
たとえば、プログラムが alarm()
を使用すると、これが発生する可能性があります タイマーが切れたときに一部のコードを非同期で実行します。プログラムが write()
を呼び出している間にタイムアウトが発生した場合 、システム コール (読み取り/書き込みなど) を再試行したいだけです。
ここでの回答は非常に優れており、内部の詳細を追加したいと思います:
<ブロック引用>
シグナルによって中断されたシステムコールは、中止して EINTR
を返すことができます または SA_RESTART
の場合にのみ自動的に再起動します sigaction(2)
で指定
このタスクを担当するのは restart_block
です システムコールを再起動するための情報と引数を追跡するために使用されます
write
の man ページから :
データが書き込まれる前にシグナルによって呼び出しが中断されました