Unix(Mac OS)システムコールはシグナルによって中断された後、どのような状況で再開されますか?マニュアルページの「通話の送信」とはどういう意味ですか?

Unix(Mac OS)システムコールはシグナルによって中断された後、どのような状況で再開されますか?マニュアルページの「通話の送信」とはどういう意味ですか?

私はUNIXシステムに関する本を読んでいますが、シグナルセクションについて議論しています。システムコールが実行され、信号が受信されたときに何が起こるのかは少し混乱します。これは、オペレーティングシステムがシグナルread()割り込みを受信したときに特定のシステムコール(たとえば)の再起動をスケジュールすることを意味します。

ただし、信号のマニュアルページを読むと、次のようになります。

一部のシステムコールでは、コールの実行中にシグナルがキャプチャされ、コールが早く終了すると、コールは自動的に再開されます。 signal(3)を使用してインストールされたすべてのハンドラにはSA_RESTARTフラグが設定されています。これは、再起動可能なシステムコールがシグナルを受信した後に返されないことを意味します。影響を受けるシステムコールには、通信チャネルまたは低速デバイス、およびioctl(2)中のread(2)、write(2)、sendto(2)、recvfrom(2)、sendmsg(2)、およびrecvmsg(2)が含まれます。 。ちょっと待って(2)。しかし、 送信された呼び出しは再開されませんが、部分的な成功を返します。(たとえば、短い読み取り数)これらの意味はsiginterrupt(3)を使用して変更できます。

  1. 「送信された通貨」とはどういう意味ですか?

  2. 信号の中断により読み出しが正常に動作しない可能性がありますか?

  3. 信号が読み込みに失敗したり異常に動作したりする場合、これを防ぐにはどうすればよいですか?

サンプルコードで答えてくれてありがとう。

関連情報