kill3000
という名前のbashエイリアスを定義して、次のタスクを自動化します。
$ lsof -i:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Ruby 13402 zero 4u IPv4 2847851 0t0 TCP *:3000 (LISTEN)
$ kill -9 13402
alias kill3000="fuser -k -n tcp 3000"
これを試して:
kill -9 $(lsof -i:3000 -t)
-tフラグは、必要なものです。PIDのみを表示します。
プロセスが見つからず、エラーメッセージを表示したくない場合:
kill -9 $(lsof -i:3000 -t) 2> /dev/null
Bashを実行していると仮定します。
Basileの提案は素晴らしいです。まずプロセスを終了しようとするのが普通ですkill -TERM、失敗したらkill -KILL(別名kill -9):
pid=$(lsof -i:3000 -t); kill -TERM $pid || kill -KILL $pid
これをbash関数にしたい場合があります。
元のlsof
コマンドを使用する別のオプション:
lsof -n -i:3000 | grep LISTEN | awk '{ print $2 }' | uniq | xargs kill -9
これをシェルスクリプトで使用する場合は、-r
xargs
にフラグを立てて、プロセスがリッスンしていない場合を処理します。
... | xargs -r kill -9
fuser -k 3000/tcp
も動作するはずです
fuser -n tcp 3000
の出力を生成します
3000/tcp: <$pid>
だからあなたができる:
fuser -n tcp 3000 | awk '{ print $2 }' | xargs -r kill
どう?
alias kill3000="lsof -i:3000 | grep LISTEN | awk '{print $2}' | xargs kill -9"