クライアントから通信するために、Javaクラスからポート#5955を開きました。完了したらこのポートを閉じる方法また、どのコマンドでポートが開いているか閉じているかがわかります。
解放したいポート番号(例:5955)を占めているプロセスID(PID)を確認します。
Sudo lsof -i :5955
PIDを使用して現在ポートを使用しているプロセスを強制終了する
Sudo kill -9 PID
プロセスを見つけるには
Sudo lsof -i :portNumber
PIDを使用して現在ポートを使用しているプロセスを強制終了する
kill PID
その後、ポートが閉じているかどうかを確認します。そうでない場合は、試してください。
kill -9 PID
前の作業がうまくいかなかった場合、私は次のようにします
Sudo kill -9 PID
安全のためだけに。ポートをどのように開いたかにもよりますが、これは問題にならないかもしれません。
しかし、あなたはポートを開いた、あなたは同じ方法でそれを閉じる。たとえば、ソケットを作成し、それをポート0.0.0.0: 5955にバインドしてlistenと呼び、同じソケットを閉じます。
また、ポートを開いているプロセスを強制終了することもできます。
どのプロセスがポートを開いているのかを知りたい場合は、これを試してください。
lsof -i :5955
ポートが開いているかどうかを知りたい場合は、同じlsofコマンドを実行できます(いずれかのプロセスがそれを開いている場合は開いています。それ以外の場合は開いていません)。
nc localhost 5955
何も出力せずにすぐに戻った場合、ポートは開いていません。
技術的に言えば、これは開いているポートではなく、Host:portの組み合わせであることを言及する価値があります。たとえば、10.0.1.2としてLANに接続している場合は、どちらか一方に影響を与えずにソケットを127.0.0.1:5955または10.0.1.2:5955にバインドすることも、0.0.0.0にバインドすることもできます。両方を同時に処理する5955。 ifconfig
コマンドを使用して、コンピュータのすべてのIPv4アドレスとIPv6アドレスを確認できます。
非常に単純なポート5900を見つける:
Sudo lsof -i :5900
それから59553をPIDとして考えます
Sudo kill 59553
この最初のコマンドを使って特定のポートを所有するプロセスを強制終了することもできます。
Sudo netstat -ap | grep :<port_number>
たとえば、このプロセスがport 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
で実行されているすべてのプロセスが強制終了されます。
2018年にここで私はMacOS HighSierraを使ってうまくいった。
Sudo lsof -nPi:yourPortNumber
その後:
Sudo kill -9 yourPIDnumber
ポートを開いたプログラムが終了すると、ポートは自動的に閉じられます。このサーバーを実行しているJavaプロセスを強制終了した場合は、それでうまくいくはずです。
この目的のために関数を作成しました。
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
このコードブロックを端末にコピーして貼り付けると、目的のポートが解放されます。最後の行でポート番号を変更するのを忘れないでください。