正直もっといい方法が絶対にあると思います。
が、備忘録として残します
時間を無駄にしたくない人のための要約
- やったこと: 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できるのかも......(確認してないので何とも言えない)