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