13

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

4

4 に答える 4

24

実行する場合:

$ 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
于 2012-10-29T21:35:17.930 に答える
6

ワンライナーは

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

ユーザーが開始していないプロセスを強制終了する場合にのみ、sudo が必要です。ユーザーがノード プロセスを開始した場合は、おそらく sudo なしで終了できます。

幸運を!

于 2013-09-13T15:36:36.240 に答える
0

シンプルなfuserソリューションではないのはなぜですか?

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

fuser -k -n tcp 3000

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

PID="$(fuser -n tcp 3000 2>/dev/null)" \
  test "node"="$(ps -p $PID -o comm=)" && kill $PID
于 2014-01-07T10:43:46.200 に答える