サーバーで実行している多くのNode.jsプロセスの1つを再起動したいと思います。実行した場合ps ax | grep node
すべてのNodeプロセスのリストを取得しましたが、どのポートにあるかはわかりません。たとえば、ポート3000で実行されているポートを強制終了するにはどうすればよいですか)。複数のNodeプロセスを管理するための良い方法ですか?
実行する場合:
$ netstat -anp 2> /dev/null | grep :3000
次のようなものが表示されます。
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 5902/node
この場合、5902
はpidです。あなたはそれを殺すためにこのようなものを使うことができます:
netstat -anp 2> /dev/null | grep :3000 | awk '{ print $7 }' | cut -d'/' -f1 | xargs kill
egrep
を使用した代替バージョンを次に示します。これは、文字列 'node'を具体的に検索するため、少し優れている可能性があります。
netstat -anp 2> /dev/null | grep :3000 | egrep -o "[0-9]+/node" | cut -d'/' -f1 | xargs kill
上記をスクリプトに変換するか、~/.bashrc
に次を配置できます。
function smackdown () {
netstat -anp 2> /dev/null |
grep :$@ |
egrep -o "[0-9]+/node" |
cut -d'/' -f1 |
xargs kill;
}
そして今、あなたは実行することができます:
$ smackdown 3000
ワンライナーは
lsof -n -i:5000 | grep LISTEN | awk '{ print $2 }' | uniq | xargs -r kill -9
ユーザーが開始しなかったプロセスを強制終了する場合にのみ、Sudoが必要になります。ユーザーがノードプロセスを開始した場合は、Sudoを使用せずにノードプロセスを強制終了できます。
幸運を!
これは私に多くの時間を節約しました:
pkill node
単純なfuser
ベースのソリューションではないのはなぜですか?
ポート3000を使用するプロセスがノードであるかどうかを気にしない場合は、次のように単純にすることができます。
fuser -k -n tcp 3000
他のプロセスを強制終了しないことを確認したくない場合は、次のような方法を使用できます。
PID="$(fuser -n tcp 3000 2>/dev/null)" \
test "node"="$(ps -p $PID -o comm=)" && kill $PID