¿Qué sucede con las solicitudes a un servicio que se detiene con SIGSTOP?

8

Si envía un SIGSTOP a un servidor web, ¿le dice el núcleo a la pila de red que bloquee / suspenda todas las conexiones a los sockets de ese servidor hasta que continúe? Parece que los valores de tiempo de espera del servidor no importan; esperará indefinidamente, pero ¿cómo?

¿Se asentarán las solicitudes en el búfer de socket indefinidamente? ¿Qué pasa si el servidor web recibe toneladas de solicitudes? ¿Qué sucede cuando el buffer del zócalo se llena?

Gregg Leventhal
fuente

Respuestas:

5

Desde el punto de vista de cualquier parte del sistema que no esté relacionada con el estado y las estadísticas del proceso, un proceso que se detiene (es decir, no se programará hasta que reciba un SIGCONT) no se puede distinguir de un proceso que se está ejecutando, pero no responde a una consulta en particular. Por ejemplo, la pila de red funciona de la misma manera si el proceso se detiene, o si está trabajando (usando el tiempo de CPU) pero no realiza ninguna llamada al sistema, o está bloqueado en alguna llamada al sistema que no se desbloquea por la red que se origina evento (por ejemplo, esperando leer de una tubería), etc.

Mientras se detiene el proceso, no existe un tiempo de espera en el proceso. Por lo general, tampoco hay tiempos de espera en la pila de red: el paquete ha sido recibido por la máquina, incluso si no ha llegado a la máquina. En cuanto a, por ejemplo, la transmisión TCP, el paquete se ha recibido y corresponde a la aplicación responder.

Si el búfer del socket se llena, la pila de red comenzará a descartar paquetes.

No hay ninguna razón por la cual el comportamiento de la pila de red dependería del estado del proceso. El proceso podría salir del estado detenido en cualquier momento. Podría haber múltiples procesos escuchando en un socket, por lo que cualquier decisión basada en el estado del proceso tendría que tenerlos en cuenta.

Gilles 'SO- deja de ser malvado'
fuente