クライアントから通信するために、Javaクラスからポート5955を開きました。完了後にこのポートを閉じるにはどうすればよいですか?また、ポートが開いているか閉じているかを示すコマンドはどれですか?
クライアントから通信するために、Javaクラスからポート5955を開きました。完了後にこのポートを閉じるにはどうすればよいですか?また、ポートが開いているか閉じているかを示すコマンドはどれですか?
回答:
解放したいポート番号(例えば、5955)を占有しているプロセスID(PID)を見つけます。
sudo lsof -i :5955
現在PIDを使用してポートを使用しているプロセスを強制終了します
sudo kill -9 PID
kill PID
(-15を意味する)を使用してから、-2と-1を試してください。-9は、他のすべてのオプションが機能しない場合にのみ、最後の手段です。
ただし、ポートを開いても、同じ方法でポートを閉じます。たとえば、ソケットを作成してポート0.0.0.0:5955にバインドし、listenを呼び出した場合は、同じソケットを閉じます。
ポートを開いているプロセスを強制終了することもできます。
どのプロセスがポートを開いているかを知りたい場合は、これを試してください:
lsof -i :5955
ポートが開いているかどうかを知りたい場合は、同じlsofコマンドを実行できます(開いているプロセスがある場合は開いています。それ以外の場合は開いていません)。または、次のように接続を試行することもできます。
nc localhost 5955
出力なしですぐに戻る場合、ポートは開いていません。
技術的に言えば、開いているポートではなく、ホストとポートの組み合わせであることは、言及する価値があります。たとえば、10.0.1.2としてLANに接続している場合は、ソケットを127.0.0.1:5955または10.0.1.2:5955にバインドできます。一方が他方に影響を与えたり、0.0.0.0にバインドしたりすることはありません。 :5955は両方を同時に処理します。ifconfig
コマンドを使用して、コンピューターのすべてのIPv4およびIPv6アドレスを表示できます。
この最初のコマンドを使用して、特定のポートを所有するプロセスを強制終了することもできます。
sudo netstat -ap | grep :<port_number>
たとえば、このプロセスがポート8000 TCPを保持しているとすると、次のコマンドが実行されます。
sudo netstat -ap | grep :8000
たとえば、ポート8000を保持するプロセスに対応する行を出力します。
tcp 0 0 *:8000 *:* LISTEN 4683/procHoldingPort
この場合、procHoldingPortはポートを開いたプロセスの名前、4683はそのpid、8000(TCPであることに注意)はそれが保持しているポート番号(閉じたい)です。
次に、上記の例に従って、プロセスを強制終了します。
kill 4683
他の人がここで言及したように、それが機能しない場合(引数として-9を指定してkillを使用してみてください):
kill -9 4683
繰り返しになりますが、一般的には、可能であればSIGKILL(-9)を送信しないことをお勧めします。
乾杯、
男。
上記のように、とlsof
組み合わせて使用しkill
ます。しかし、このプロセスを自動化するための簡単なbashスクリプトを作成しました。
このスクリプトを使用するとkillport 3000
、どこからでも簡単に入力でき、ポートで実行されているすべてのプロセスが強制終了されます3000
。
lsof
でとの組み合わせでkill
何も返されず、スクリプトがmacOS Sierraでハングしました。しかしkillport
、魅力のように機能し、より高速です。ありがとう!
このための関数を作成しました。
function free_port() {
if [ -z $1 ]
then
echo no Port given
else
PORT=$1;
PID=$(sudo lsof -i :$PORT) # store the PID, that is using this port
if [ -z $PID ]
then
echo port: $PORT is already free.
else
sudo kill -9 $PID # kill the process, which frees the port
echo port: $PORT is now free.
fi
fi
}
free_port 80 # you need to change this port number
このコードブロックを端末にコピーして貼り付けると、目的のポートが解放されます。最後の行でポート番号を変更することを忘れないでください。
まず、必要なポートを占有しているプロセスID(pid)を見つけます(例:5434)
ps aux | grep 5434
2.そのプロセスを殺す
kill -9 <pid>