2021年9月30日木曜日

問題を起こすプロセスを定期的に強制終了する

 macの動作を重くしたり不安定にさせたりするプロセス(アプリケーション含む)はなるべく終了させるか排除したくなるものです。純正のものではWindowServer, Falcond, mdworkerなどが重いですが、システムに必要そうなので我慢です。しかし、非純正のプロセスならいっそ落としてしまえば動作が改善する場合があるかもしれません。

このところmacが非常に不安定になっていて、Zoom会議で落ちる、Rで負荷の掛かる処理をすると落ちる、フォルダを移動しただけでもなど、処理内容が重い方が落ちやすいけれど軽くても構わず落ちる(カーネルパニック)現象がひどい時は1〜2日に一度くらいの頻度で起きるという困った状況に陥っていました。これではまったく使い物になりません。もしやと思い、心当たりの非純正アプリケーションを朝・夜にアクティビティモニタから強制終了させてみたところ、それらのトラブルは全て解消されました。残念ながら該当のアプリを削除するわけにはいかなさそうなのですが、この定期的なリフレッシュを自動で実行する仕組みを構築してみました。以下のような手順です。Automatorとカレンダー.appを使用します。

1. まず対象プロセスを強制終了させるアプリケーションを作成する。

1-1.「アプリケーション」から「Automator.app」を立ち上げる。


1-2. すると次のような新規書類が現れるはずなので「ワークフロー」を選択する。


1-3. 「アクション」の中から「シェルスクリプトを実行」を選び、右の枠の中へとドラッグアンドドロップする。


1-4. シェルスクリプトの入力は、「pkill プロセス名」とする。これはプロセス名のプロセス(アプリケーションである場合もある)を強制終了させるコマンドである。「ユーティリティ」の「アクティビティモニタ」にリストアップされるプロセス名で記す。プロセス名は先頭から一部の文字で構わない。また大文字と小文字を区別する必要がある。例えば、対象としたいプロセス名が「Hogehoge1」と「Hogehoge2」の場合、「pkill Hoge」で両方が対象となる。「pkill hoge」だと対象と見なされず何も起こらない。
 

1-5. 「ファイル」メニューから「アプリケーション」として保存する(ワークフローではなく)。保存場所はどこでも良さそう。一度、手動で立ち上げて、ちゃんと狙い通り動作(対象プロセスを強制終了)するか確かめておいた方が良いだろう。


2. 作成したアプリケーションを定期的に実行させる仕組みを作る。
6. 「カレンダー.app」の予定を作成する。アプリを実行したい時間を設定する。さらに「通知」の仕方として「ファイル(イベントの開始時刻)を開きます」を選択、開始時刻リストの下にある「カスタム」を選択する。


7.  「ファイルを開く」対象がデフォルトでは「カレンダー」のところを、「その他...」を選択し、先ほど作成したアプリケーションを選択する。

8.  「繰り返し」を毎日にすれば、決まった時刻に実行される。私の場合、朝用と夜用を作成し、1日に2回リセットさせるように設定した。カレンダー.appは落としておいても動作するようです。

難点といえば「カレンダー」に毎日この定期リセットのための予定が書き込まれてしまうことです。ただし予定のグループを専用に設けて非表示にしておけば見えなくすることができます。また、通知機能を利用しているので、定時のリセットの度に通知されるのも気になると言えば気になりますが、ちゃんと機能していることを意識はできます。