SIGSTOPをWebサーバーに送信すると、カーネルは継続するまで、サーバーソケットへのすべての接続をブロック/休止するようにネットワークスタックに指示しますか?サーバータイムアウト値は重要ではないようですが、どうなりますか?
リクエストはソケットバッファに無期限に残りますか? Webサーバーが多くの要求を受け取った場合はどうなりますか?ソケットバッファがいっぱいになるとどうなりますか?
答え1
プロセスの状態と統計を考慮しないシステム部分の観点からは、停止したプロセス(SIGCONTを受信するまで予約されていない)は、実行中のプロセスと区別できませんが、特定のクエリには応答しません。たとえば、プロセスが停止しているか、動作している(CPU時間を使用していますが)システムコールを行っていないか、一部のシステムコールでブロックされている(システムコールがネットワークで開始されたプロセスによってブロック解除されていない)かに関係なく、ネットワークはスタックは同じ動作方法で始まります。イベント(例:パイプからの読み取りを待っています)など
プロセスが停止すると、プロセスにタイムアウトのようなものはありません。通常、ネットワークスタックにもタイムアウトはありません。パケットがまだシステムに到達していない場合でも、システムからパケットを受信しました。たとえば、TCPトランスポートの場合、アプリケーションはパケットを受信して応答しました。
ソケットのバッファがいっぱいになると、ネットワークスタックはパケットドロップを開始します。
ネットワークスタックの動作がプロセスの状態に依存する理由はありません。プロセスはいつでも停止状態を終了できます。ソケットを受け取るプロセスが複数ある可能性があるため、プロセスの状態に応じた決定はすべてのプロセスを考慮する必要があります。