
mosh-server
Mosh を使用した後、すべてのプロセスが終了した後も、 が保持している UDP ポートがまだ使用されていることに気付きました。
を実行すると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) で実行されました。