O que acontece com solicitações para um serviço que é interrompido com SIGSTOP

8

Se você enviar um SIGSTOP para um servidor da Web, o kernel apenas informará à pilha de rede para bloquear / suspender todas as conexões com o (s) soquete (s) desse servidor até que ele continue? Parece que os valores de tempo limite do servidor não importam; vai esperar indefinidamente, mas como?

As solicitações ficarão no buffer de soquete indefinidamente? E se o servidor web receber toneladas de solicitações? O que acontece quando o buffer de soquete é preenchido?

    
por Gregg Leventhal 07.05.2015 / 22:48

1 resposta

5

Do ponto de vista de qualquer parte do sistema que não esteja relacionada com o estado e estatísticas do processo, um processo que é interrompido (isto é, não será agendado até receber um SIGCONT) é indistinguível de um processo que é em execução, mas não está respondendo a uma consulta específica. Por exemplo, a pilha de rede opera da mesma forma se o processo está parado ou está funcionando (usando o tempo da CPU), mas não fazendo nenhuma chamada do sistema, ou está bloqueado em alguma chamada do sistema que não é desbloqueada pela origem da rede. evento (por exemplo, esperando para ler de um tubo), etc.

Enquanto o processo é interrompido, não existe um tempo limite no processo. Normalmente não há timeouts na pilha de rede: o pacote foi recebido pela máquina, mesmo que não tenha chegado à máquina. Tanto quanto p. Transmissão TCP está em causa, o pacote foi recebido e cabe ao aplicativo responder.

Se o buffer do soquete ficar cheio, a pilha da rede começará a descartar pacotes.

Não há razão para o comportamento da pilha de rede depender do estado do processo. O processo pode sair do estado parado a qualquer momento. Poderia haver vários processos ouvindo em um soquete, portanto, qualquer decisão baseada no estado do processo teria que levar todos em consideração.

    
por 07.05.2015 / 23:48