netstat에 존재하지 않는 프로세스에 대한 pid가 있는 열린 포트가 표시됩니까?

netstat에 존재하지 않는 프로세스에 대한 pid가 있는 열린 포트가 표시됩니까?

보고서 실행에 대한 정보를 수신하기 위해 포트를 수신하는 프로그램이 있습니다. 프로그램을 닫았다가 다시 열면 사용하는 포트가 이미 사용 중이라는 오류가 발생합니다. 을 보면 netstatCLOSE_WAIT 상태에 해당 포트의 인스턴스가 9개 있고 수신 상태에 있는 인스턴스가 1개 있는 것을 알 수 있습니다. 청취 상태에 있는 인스턴스는 pid 488이 소유하고 있다고 말합니다. 작업 관리자는 해당 ID를 가진 프로세스가 없다고 표시하고 taskkill동일하게 말합니다. 이 앱은 사내 .NET 애플리케이션입니다.

이것은 프로덕션 환경이므로 시스템을 다시 시작하지 않으려고 합니다. 이 문제의 원인은 무엇이며 이를 해결하려면 어떻게 해야 합니까?

답변1

CLOSE_WAIT는 소켓이 다른 쪽 끝에서 FIN 패킷을 수신했으며 해당 청취 소켓을 소유한 애플리케이션이 닫히기를 기다리고 있음을 의미합니다. 청취 소켓에서 close()를 호출하지 않으면 마치 그랬던 것처럼 떠다니는 원인이 될 수 있습니다.

내부 .NET 애플리케이션이므로 소스 코드를 다시 확인하여 종료하기 전에 소켓이 제대로 close()되고 있는지 확인하겠습니다.

CLOSE_WAIT를 포함한 소켓 상태에 대한 추가 정보: http://blogs.technet.com/b/janelewis/archive/2010/03/09/explaining-close-wait.aspx

관련 정보