2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-10-23

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

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

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

やりたいこと

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

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

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

やってみる

内容の整理

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

  • 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できるのかも......(確認してないので何とも言えない)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?