何度も蘇るプロセスを永遠に殺し続ける.sh


正直もっといい方法が絶対にあると思います。
が、備忘録として残します

時間を無駄にしたくない人のための要約

  • やったこと: PIDを取得して無限ループで永遠にkillする

やりたいこと

killしてもkillしても蘇る特定のプロセスをkillし続けたい。
プロセスはバックグラウンドで定期的に起動するもよう。
環境: macOS Catalina

まずはプロセス名を調べる

Applications > Utilitiesからアクティビティモニターを開いて、プロセス名を調べます。

やってみる

内容の整理

プロセス名がわかったところで、やりたいことを整理します。
やりたいのは

  • killしてもすぐ蘇る特定のプロセスをkillし続ける

ということです。
ですので処理としては

  • ps aux | grep ProcessName でプロセスが実行されているか確認し、実行されていればkillする

というもので大丈夫そうです。それではスクリプトを書いていきます

実装

#!/bin/bash

while true;
do
    # ProcessNameには殺したいプロセスの名前を入れてください
    TARGETPID=`ps aux | grep ProcessName | grep -v grep | awk '{print $2}'`

    if [ -n "$TARGETPID" ]; then
        `kill -9 ${TARGETPID}`
    fi

    sleep 5
done

見ての通りただの無限ループです。(何となく5秒間隔にしてみた)

  • ps aux | grep ProcessName でプロセスを確認
  • grep -v grep で自分自身の結果は除外
  • awk '{print $2}' でPIDのみ抽出
  • ↑の結果を一旦変数に格納、空じゃなければkillする

ということをしています。
5秒おきにしてますが、1秒おきとかインターバルおかないとかでも、これぐらいの処理なら別にいいと思います

Operation Not Permitted

killしようとするとこのメッセージが表示される場合がありました。
そんな場合は一旦sudoでkillを試せばいいかもしれません。(sudo kill or sudo kill -9)

#PIDには殺したいプロセスのIDを入れてください

sudo kill PID
#もしくは
sudo kill -9 PID

それでも無理ならmacのrootユーザーでログインしなおして、そのユーザーで実行すればkillできるのかも......(確認してないので何とも言えない)