
Mosh를 사용한 후, 모든 프로세스가 종료된 후에도 가 보유한 UDP 포트가 mosh-server
여전히 사용 중임을 확인했습니다.
실행하면 netstat -ln
다음 포트가 사용 중임을 보여줍니다.
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
udp4 0 0 10.0.106.61.60002 *.*
udp4 0 0 10.0.106.61.61006 *.*
OS X이기 때문에 netstat -p
플래그가 지원되지 않으므로 프로세스의 PID를 찾을 수 없습니다.https://stackoverflow.com/a/3855359지적. 대신 sudo lsof -i :61006
아무것도 반환하지 않는 를 실행합니다.
좋아요... 아마도 숫자 포트와 호스트 이름이 포함된 모든 열려 있는 파일을 나열하고 이를 통해 grep할 수 있을까요? sudo lsof -i -n -P | grep 61006
...아뇨, 다시는 아무것도 아닙니다.
분명히 이러한 포트는 재부팅 시 정리됩니다... 하지만 여기서 과제는 재부팅하지 않고 진단하고 해제하는 것입니다.
어떤 아이디어가 있나요?
답변1
1년 남짓 후에 이 문제에 다시 부딪혔지만 이번에는 더 깊이 진단했습니다. 이번에는 팬텀 포트 바인딩 프로세스가 Mosh가 아닌 Java였으며 UDP 대신 TCP를 사용하고 있었습니다. 이 경우 프로세스는 "종료" 상태로 판명되었으며 시스템 재부팅을 제외하고는 전혀 종료될 수 없었습니다.
진단을 하던 중 몇 가지 흥미로운 점을 발견했습니다.
netstat
플래그를 사용하여 PID를 볼 수 있습니다-v
.$ netstat -avn Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) rhiwat shiwat pid epid ... tcp4 0 0 *.6000 *.* LISTEN 131072 131072 50207 0
에 표시되는 프로세스 50207은
netstat
다음을 수행합니다.~ 아니다lsof
의 유무에 관계없이 모든 변형에 나타납니다sudo
. 이는 질문에 문서화된 것과 동일한 동작입니다.sudo kill -9
! 을 사용해도 프로세스를 종료할 수 없습니다 . 의 항목을 검사해 보면ps
"?E"에 해당하는 흥미로운 "종료" 상태인 것으로 보입니다.$ ps aux USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND ... mxxk 50207 0.0 0.0 0 0 ?? ?E 5Aug19 0:00.00 (java)
문서화 된대로https://serverfault.com/questions/85799/how-to-kill-an-exiting-process-on-os-x-state-e, MacOS에서 기존 프로세스를 종료하는 유일한 방법은 재부팅하는 것 같습니다. (Linux가 다르게 동작하는지 확실하지 않습니다.)
이 모든 작업은 MacOS High Sierra(10.13.6)에서 수행되었습니다.