解決策 1:
root または sudo で netstat と lsof を実行しましたか?最後の列に注目してください:
netstat -ln --program
tcp 0 0 192.168.21.1:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
sudo netstat -ln --program
tcp 0 0 192.168.21.1:53 0.0.0.0:* LISTEN 2566/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2566/named
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3125/sshd
netstat マンページから:
<ブロック引用>所有していないソケットでこの情報を表示するには、スーパーユーザー権限も必要です。
走っている人がいないってどうしてわかるの?ポートが使用中の場合、'socket in use' エラーですぐに終了することは理にかなっています。ポートに telnet するとどうなりますか?
telnet localhost 5666
解決策 2:
カーネルによって開かれたポートは、プログラム名とともに表示されません。いくつかの NFS および OCFS が思い浮かびます。多分それはそのようなものですか?
または、カーネルのバグである可能性があります。カーネル ログで OOPS とバグを確認してください。
解決策 3:
root ユーザーとして「netstat --tcp --udp --listening --program」を実行します .そうしないと、PID/プログラム名が得られません
kill -9 PID コマンドを使用
解決策 4:
私は実際に、これらの時折の質問を特定するのに役立つ小さなシェル スクリプトを作成しました:
#! /bin/bash
([ "$1" = "" ] || [ "$2" = "" ]) && echo "Usage: tracer <space> <port>" && exit 0
for i in `fuser -n $1 $2`
do
ps aux | grep $i | grep -v 'grep'
done
/usr/local/bin/tracer として保存します。出力:
[email protected]:/usr/flows# tracer tcp 80
80/tcp:
root 27904 0.0 0.0 111668 3292 ? Ss Aug04 0:03 /usr/sbin/apache2 -k start
www-data 32324 0.0 0.0 335332 3560 ? Sl Aug05 0:00 /usr/sbin/apache2 -k start
www-data 32327 0.0 0.0 335324 3560 ? Sl Aug05 0:00 /usr/sbin/apache2 -k start
使用するには root 権限が必要です
解決策 5:
netstat を介して i ノードを取得し、その i ノードを lsof で使用することで、プロセスを追跡することができました。 https://serverfault.com/a/847910/94376 で私のより詳細な回答を参照してください。