Moshを使用した後、すべてのプロセスが終了した後も、mosh-server
によって保持されている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 *.*
これはOSXであるため、netstat -p
フラグはサポートされていません。そのため、 https://stackoverflow.com/a/3855359 が指摘しているように、プロセスのPIDが見つかりません。代わりに、何も返さないSudo lsof -i :61006
を実行します。
わかりました...おそらく、開いているすべてのファイルを数値のポートとホスト名で一覧表示し、それを介してgrepを実行できますか? Sudo lsof -i -n -P | grep 61006
...いいえ、もう何もありません。
明らかに、これらのポートは再起動時にクリーンアップされます...しかし、ここでの課題は、再起動せずにそれらを診断して解放することです。
何か案は? ????
1年ちょっと後、私は再びこの問題に遭遇しましたが、今回はそれをより深く診断しました。今回、ファントムポートバウンドプロセスはJavaであり、Moshではなく、UDPの代わりにTCPを使用していました。この場合、プロセスは次のようになりました。システムの再起動を除いて、「終了」状態にあり、完全に強制終了できませんでした。
診断中に、途中でいくつかの興味深い点を発見しました。
-v
フラグを使用して、netstat
のPIDを確認できます。
$ 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
netstat
に表示されるプロセス50207は、lsof
の有無にかかわらず、Sudo
のバリアントには表示されませんnot。これは、質問に記載されているのと同じ動作です。
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の動作が異なるかどうかはわかりません。)
これはすべてMacOSHigh Sierra(10.13.6)で行われました。