web-dev-qa-db-ja.com

UDPポートはnetstatに表示されますが、lsofには表示されませんか?

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
mxxk

1年ちょっと後、私は再びこの問題に遭遇しましたが、今回はそれをより深く診断しました。今回、ファントムポートバウンドプロセスはJavaであり、Moshではなく、UDPの代わりにTCPを使用していました。この場合、プロセスは次のようになりました。システムの再起動を除いて、「終了」状態にあり、完全に強制終了できませんでした。

診断中に、途中でいくつかの興味深い点を発見しました。

  1. -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
    
  2. netstatに表示されるプロセス50207は、lsofの有無にかかわらず、Sudoのバリアントには表示されませんnot。これは、質問に記載されているのと同じ動作です。

  3. 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)
    
  4. https://serverfault.com/questions/85799/how-to-kill-an-exiting-process-on-os-x-state-e に記載されているように、唯一の方法はMacOSで既存のプロセスを終了するには、再起動します。 (Linuxの動作が異なるかどうかはわかりません。)

これはすべてMacOSHigh Sierra(10.13.6)で行われました。

0
mxxk