web-dev-qa-db-ja.com

どのNode.jspidがどのポートで実行されているかを確認する方法

サーバーで実行している多くのNode.jsプロセスの1つを再起動したいと思います。実行した場合ps ax | grep nodeすべてのNodeプロセスのリストを取得しましたが、どのポートにあるかはわかりません。たとえば、ポート3000で実行されているポートを強制終了するにはどうすればよいですか)。複数のNodeプロセスを管理するための良い方法ですか?

10
Pardoner

実行する場合:

$ 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
16
David Weldon

ワンライナーは

lsof -n -i:5000 | grep LISTEN | awk '{ print $2 }' | uniq | xargs -r kill -9 

ユーザーが開始しなかったプロセスを強制終了する場合にのみ、Sudoが必要になります。ユーザーがノードプロセスを開始した場合は、Sudoを使用せずにノードプロセスを強制終了できます。

幸運を!

5
Michael Cole

これは私に多くの時間を節約しました:

pkill node

4
Naveed Ul Islam

単純なfuserベースのソリューションではないのはなぜですか?

ポート3000を使用するプロセスがノードであるかどうかを気にしない場合は、次のように単純にすることができます。

fuser -k -n tcp 3000

他のプロセスを強制終了しないことを確認したくない場合は、次のような方法を使用できます。

PID="$(fuser -n tcp 3000 2>/dev/null)" \
  test "node"="$(ps -p $PID -o comm=)" && kill $PID
0
idrarig