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

8

Se você enviar um SIGSTOP para um servidor da Web, o kernel simplesmente instrui a pilha de rede a bloquear / adormecer todas as conexões com os soquetes desse servidor até que continue? Parece que os valores de tempo limite do servidor não importam; vai esperar indefinidamente, mas como?

As solicitações ficam no buffer de soquete indefinidamente? E se o servidor da Web receber toneladas de solicitações? O que acontece quando o buffer do soquete é preenchido?

Gregg Leventhal
fonte

Respostas:

5

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

Enquanto o processo está parado, não existe tempo limite no processo. Geralmente, também não há tempos limite na pilha de rede: o pacote foi recebido pela máquina, mesmo que não tenha chegado à máquina. No que diz respeito, por exemplo, à transmissão TCP, o pacote foi recebido e cabe ao aplicativo responder.

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

Não há razão para que o comportamento da pilha de rede dependa do estado do processo. O processo pode sair do estado parado a qualquer momento. Pode haver vários processos atendendo em um soquete, portanto, qualquer decisão com base no estado do processo precisaria levar todos eles em consideração.

Gilles 'SO- parar de ser mau'
fonte