イベントループ
UNIXでファイルインタフェースに従わない数少ない例として、非同期イベント(シグナル)がある。シグナルはシグナルハンドラで受信する。シグナルハンドラは小さな制限されたコードであり、それが動作中はプログラム本体の処理はサスペンドされる。select()でブロック中にシグナルを受信して処理した場合、selectはEINTRというエラーコードを伴って早期に戻る。プログラムがCPUを使用している間にシグナルを受信すると、シグナルハンドラを実行する間は本体の実行がサスペンドされる。
したがってシグナルを考慮するには、シグナルハンドラで大域変数のフラグをセットし、イベントループのselect()呼び出しの直前と直後でそのフラグをチェックすればよい。フラグがセットされていたら、ファイル記述子でのイベントと同様にシグナルを処理する。しかしながら、この技法では競合状態が生じる。フラグのチェックとselect()呼び出しの間にシグナルが到着した場合、select()が他の理由で戻るまでシグナルを処理できない。
この問題を解決するため、POSIXではpselectシステムコールを提供している。