Was passiert mit Anfragen an einen Dienst, der mit SIGSTOP gestoppt wird?

8

Wenn Sie einen SIGSTOP an einen Webserver senden, weist der Kernel den Netzwerkstapel lediglich an, alle Verbindungen zu den Sockets dieses Servers zu blockieren / zu sperren, bis er fortgesetzt wird? Es scheint, dass die Server-Timeout-Werte keine Rolle spielen. es wird auf unbestimmte Zeit warten, aber wie?

Werden Anforderungen unbegrenzt im Socket-Puffer gespeichert? Was ist, wenn der Webserver unzählige Anfragen erhält? Was passiert, wenn der Socket-Puffer voll ist?

Gregg Leventhal
quelle

Antworten:

5

Aus der Sicht eines Teils des Systems, der sich nicht mit dem Status und den Statistiken des Prozesses befasst, ist ein Prozess, der gestoppt wird (dh erst geplant wird, wenn er ein SIGCONT erhält), nicht von einem laufenden Prozess zu unterscheiden, aber antwortet nicht auf eine bestimmte Anfrage. Beispielsweise funktioniert der Netzwerkstapel auf die gleiche Weise, unabhängig davon, ob der Prozess gestoppt ist oder Arbeit leistet (mit CPU-Zeit), aber keinen Systemaufruf tätigt, oder ob er in einem Systemaufruf blockiert wird, der vom Netzwerkursprung nicht entsperrt wird Ereignis (z. B. Warten auf das Lesen aus einer Pipe) usw.

Während der Prozess gestoppt ist, gibt es keine Zeitüberschreitung im Prozess. Normalerweise gibt es auch keine Zeitüberschreitungen im Netzwerkstapel: Das Paket wurde vom Computer empfangen, auch wenn es nicht am Computer angekommen ist. Was beispielsweise die TCP-Übertragung betrifft, wurde das Paket empfangen und es liegt an der Anwendung, zu antworten.

Wenn der Puffer des Sockets voll ist, beginnt der Netzwerkstapel, Pakete zu verwerfen.

Es gibt keinen Grund, warum das Verhalten des Netzwerkstapels vom Status des Prozesses abhängt. Der Prozess kann jederzeit aus dem gestoppten Zustand herauskommen. Es können mehrere Prozesse auf einen Socket warten, sodass bei jeder Entscheidung, die auf dem Prozessstatus basiert, alle berücksichtigt werden müssen.

Gilles 'SO - hör auf böse zu sein'
quelle