SIGSTOP을 웹 서버에 보내면 커널은 계속될 때까지 해당 서버 소켓에 대한 모든 연결을 차단/휴면하도록 네트워크 스택에 지시합니까? 서버 시간 제한 값은 중요하지 않은 것 같지만 어떻게 될까요?
요청이 소켓 버퍼에 무기한으로 남아 있습니까? 웹 서버가 많은 요청을 받으면 어떻게 되나요? 소켓 버퍼가 가득 차면 어떻게 되나요?
답변1
프로세스 상태 및 통계를 고려하지 않는 시스템 부분의 관점에서 보면 중지된 프로세스(즉, SIGCONT를 수신할 때까지 예약되지 않음)는 실행 중인 프로세스와 구별할 수 없지만 특정 쿼리에 응답하지 않습니다. 예를 들어, 프로세스가 중지되었는지, 작동 중(CPU 시간 사용)이지만 시스템 호출을 하지 않거나 일부 시스템 호출에서 차단되었는지(시스템 호출이 네트워크에서 시작된 프로세스에 의해 차단 해제되지 않음) 여부에 관계없이 네트워크는 스택은 동일한 작동 방식으로 시작됩니다. 이벤트(예: 파이프에서 읽기를 기다리는 중) 등
프로세스가 중지되면 프로세스에 시간 초과 같은 것이 없습니다. 일반적으로 네트워크 스택에도 시간 초과가 없습니다. 패킷이 아직 시스템에 도달하지 않았더라도 시스템에서 패킷을 수신했습니다. 예를 들어 TCP 전송의 경우 애플리케이션이 패킷을 수신하고 응답했습니다.
소켓의 버퍼가 가득 차면 네트워크 스택은 패킷 삭제를 시작합니다.
네트워크 스택의 동작이 프로세스 상태에 따라 달라져야 할 이유가 없습니다. 프로세스는 언제든지 중지된 상태를 종료할 수 있습니다. 소켓을 수신하는 여러 프로세스가 있을 수 있으므로 프로세스 상태에 따른 결정은 모든 프로세스를 고려해야 합니다.