SIGSTOPをWebサーバーに送信した場合、カーネルはネットワークスタックに、サーバーソケットへのすべての接続がブロックされるかスリープするように指示しますか?サーバーのタイムアウト値は問題ではないようです。それは無期限に待機しますが、どうですか?
リクエストは無期限にソケットバッファーに残りますか?Webサーバーが大量のリクエストを受け取った場合はどうなりますか?ソケットバッファーがいっぱいになるとどうなりますか?
SIGSTOPをWebサーバーに送信した場合、カーネルはネットワークスタックに、サーバーソケットへのすべての接続がブロックされるかスリープするように指示しますか?サーバーのタイムアウト値は問題ではないようです。それは無期限に待機しますが、どうですか?
リクエストは無期限にソケットバッファーに残りますか?Webサーバーが大量のリクエストを受け取った場合はどうなりますか?ソケットバッファーがいっぱいになるとどうなりますか?
回答:
システムのプロセスの状態や統計に関係のない部分から見ると、停止している(つまり、SIGCONTを受信するまでスケジュールされない)プロセスは、実行中のプロセスと区別できませんが、特定のクエリに応答していません。たとえば、ネットワークスタックは、プロセスが停止しているか、(CPU時間を使用して)作業を行っているがシステムコールを実行していないか、またはネットワーク発信によってブロック解除されていないシステムコールでブロックされているかどうかにかかわらず、同じように動作します。イベント(例:パイプからの読み取り待ち)など
プロセスが停止している間、プロセスにタイムアウトなどはありません。通常、ネットワークスタックにもタイムアウトはありません。パケットがマシンに届かなくても、パケットはマシンによって受信されています。たとえばTCP送信に関する限り、パケットは受信され、応答するかどうかはアプリケーション次第です。
ソケットのバッファがいっぱいになると、ネットワークスタックはパケットのドロップを開始します。
ネットワークスタックの動作がプロセスの状態に依存する理由はありません。プロセスはいつでも停止状態から抜け出すことができます。ソケットをリッスンする複数のプロセスが存在する可能性があるため、プロセスの状態に基づく決定では、それらすべてを考慮する必要があります。