🔪

macOS+zsh: portを使用しているプロセスを1発でkillするShell関数を作った

2021/11/01に公開

いつも通りやると

  1. $ lsof -i :[port番号] でport番号からpidを調べる
  2. $ kill -9 [pid] でプロセスをkillする

これだといちいちめんどくさい & 忘れてて何度もググることになりますよね。

.zshrcに関数を作成する

  1. ~/.zshrc をVScodeでもVimでもいいので開きます。
  2. 下のコードを挿入して保存します。
  3. source ~/.zshrc で反映させます。
# Function
function kpp () {
  pid=`lsof -i :"$1" -t`
  wait
  if [ -z $pid ]; then
    tput bel
    echo "$(tput setaf 3)🧘 No Process on Port $1$(tput sgr 0)"
  else
    kill -9 $pid
    lsof -i :"$1" -t 2>/dev/null >/dev/null || echo "$(tput setaf 2)🔪 Killed Processes on Port $1$(tput sgr 0)"
  fi
}

使い方

  • kpp という名前で関数を作成しました。
  • 後ろにport番号をくっつけると第一引数として渡されます。
  • kppKill Process on a Port の略であり、 きゃりーぱみゅぱみゅ の略称です。

コードの解説

function kpp () { # kpp という関数を作成します。
  pid=`lsof -i :"$1" -t` # 第一引数(port番号)を$1で受けて、lsofコマンドを使ってportを使用しているプロセスのIDを取得し、変数pidに代入します。
  wait # 上のプロセスが完了するまで待ちます。
  if [ -z $pid ]; then # pidが存在していない場合
    tput bel # コマンドがbelを鳴らします
    echo "$(tput setaf 3)🧘 No Process on Port $1$(tput sgr 0)" # 結果をyellowで出力します
  else
    kill -9 $pid # プロセスをkillします
    lsof -i :"$1" -t 2>/dev/null >/dev/null || echo "$(tput setaf 2)🔪 Killed Processes on Port $1$(tput sgr 0)" # プロセスが終了していることを確認し、結果をgreenで出力します
  fi
}

Discussion