アプリを終了してもそのアプリに付随するプロセスが残りメモリを使っていたり、PC起動時に不要なプロセスが実行され毎回1つずつ終了させるのが億劫でPCを再起動させるのも躊躇してしまう人は割と多いのではないでしょうか?
今回はそんな面倒なプロセスの終了を一括で終わらせる方法を掲載していきたいと思います。
ターミナルの操作などは問題なく出来、早速やり方を見たい方は3.からお読みください。
まずPCにあまり詳しくない方であれば、mac上で不要なプロセスを終了させるには下記画像のようにアクティビティモニタを開いて不要なプロセス名をクリックし終了させる方法を取ると思います。
1つ2つ終了させるのであればこのやり方でもよいかもしれませんが、終了させたいプロセスが多いと探すのも手間になるものです。
そこで手間を省く方法としてターミナルを利用します。
ターミナルを使った操作は玄人感があって使ったコトがない人であれば抵抗があると思いますが、使えるようになると様々な場面で効率よく作業が出来るようになりますので、これを機にどんなものか触れてみましょう。
1.ターミナルを使ったプロセスの終了方法
まずターミナルを起動させます。
ターミナルはホットコーナーに設定してあるLaunchpadから起動してもよいですし、Finderを立ち上げアプリケーションの中から探してもよいです。
アプリケーション > ユーティリティ > ターミナル.app といった階層になっています。
ターミナルを立ち上げると下記画像のような形のものが表示されます。
※私の環境ではログインシェルをzshに変更していないので冒頭、「The default interactive shell is 〜」などと表示されていますがここは気にしないでください。
$と表示されている部分に命令(コマンド)を打ち込んでいきます。
コピペも可能です。
プロセスの終了に使うコマンドは大体、以下の4つのコマンドになってくると思います。
kill
killall
pkill
pgrep
pgrep以外はkillという単語が入っており、その単語のイメージ通りプロセスの終了を連想させます。
pgrepは他の3つとは質が違います。
それではkillコマンドから使い方を説明していきます。
kill
killコマンドはPID(プロセス ID)を対象にしたプロセスの終了命令です。
各プロセスのPIDはターミナル内でも確認出来ますが、今回はアクティビティモニタで説明します。
下記画像を見てください。
右端にPIDという列があると思います。
そこに表示されている数値になります。
そしてkillコマンドを使った終了の仕方は下記形式にてターミナルに打ち込みます。
$ kill [PID]
上記のAdobe Desktop Service を終了させたい場合は、
$ kill 4399
となります。
複数の指定をする場合は、半角スペースを入れPIDを続けて打ち込んでください。
$ kill 4399 1234 9876
ただ、PIDというのは基本的に起動時に変動しますので決まったプロセスを毎回終了させるというテーマの中では使えないコマンドです。
また、コマンドにはシグナルやオプションという更に細かい命令を指定出来るモノがあります。
本日紹介する4つのコマンドのシグナルやオプションは大体共通しているのですが、例えば $ kill [PID] の形のまま実行すると普通の終了が命令されますが、PID の前に -9 を入れると強制終了の命令が出せます。
// 通常終了
$ kill [PID]
// 強制終了
$ kill -9 [PID]
次にkillallコマンドの説明をします。
killall
killallコマンドはPIDではなく、プロセス名で指定します。
// 通常終了
$ killall [プロセス名]
// 強制終了
$ killall -9 [プロセス名]
例えば上記画像の緑枠内、AdobeCRDaemon というプロセスのように同じ名前で複数存在するモノもあります。
そういった場合は、1つずつPIDを調べて終了させるよりkillallを使い一括で終了させてしまった方が効率は良いです。
$ killall AdobeCRDaemon
この指定で緑枠の4つは一括で終了します。
次に、pkillコマンドとpgrepコマンドについて説明します。
pkill pgrep
この2つはセットで利用する方が良いので合わせて説明します。
pkillコマンドはkillallコマンドに似ています。
厳密に言うと違いは他にもあるのかもしれませんが、簡単に違いを言いますとkillallコマンドはプロセス名を正確に完全一致になるよう指定しなければ処理してくれませんが、pkillコマンドは部分一致で処理してしまいます。
例えば先程例に出した、AdobeCRDaemon という名前のプロセス名があります。
これをpkillで終了させる場合は、Adobe と入力すれば終了させることが出来るのですが、付随して Adobe Desktop Service というようなAdobeという文字が入っている他のプロセスも一緒に終了させてしまいます。
対して、killallコマンドを使う場合は、AdobeCRDaemon としっかり入力しなければ終了するコトが出来ません。
つまりpkillコマンドの場合は、終了させたいプロセスと同じ名前が入っていれば関係のないプロセスまで終了させてしまうというコトです。
その為、利用する際は慎重にならないといけません。
そこで登場するのが、pgrepコマンドです。
pgrepコマンドではpkillコマンドで終了させる前に何が終了になるか調べられるコマンドになります。
例えば今回Adobe系のプロセスを例に出していますが、Adobeという単語がプロセス名に入っているプロセスを調べたい場合、下記コマンドを打ち込みます。
$ pgrep Adobe
すると、下記画像のように処理されます。
Adobeという名前が入っているプロセスのPIDが表示されました。
そして、
$ pkill Adobe
と命令すれば、上記画像内に表示されているPIDのプロセスが終了します。
※強制終了のシグナル指定はkillallなどと同じです。
しかし、シグナルやオプションの付いていない上記の命令の仕方だと完璧とは言えません。
※もちろん状況によっては十分の場合もあります。
例えば、上記命令の形でAdobeと指定した場合プロセス名の中にあるAdobeのAが大文字になっていないとヒットしません。
つまり何もオプションを指定しないと大文字と小文字を分けて検索する形になります。
中にはadobeと小文字になっているプロセス名もありますので、それも含めてヒットさせたい場合は -i というオプションを利用します。
$ pgrep -i Adobe
$ pkill -i Adobe
このようにすると、大文字小文字関係なくヒットするようになります。
さらに、上記の命令ではプロセス名に入っているかどうかで判断しますが、プロセス名に対象の文字が入っていないけど該当のアプリケーションに使われている不要なプロセスというのもあると思います。
そこで検索の範囲を広げるために -f というオプションを追加します。
-f というオプションは コマンドライン全体をパターンマッチの対象にするオプションです。
これを先程のAdobeの命令に追加してみます。
$ pgrep -f -i Adobe
すると、ヒットする数が先程より増えました。
もちろん、終了させたくないプロセスが入っている可能性もありますのでPIDをみて検証する必要はあります。
問題なければ、
$ pkill -f -i Adobe
を実行してください。
※ Adobeの部分は例ですのでご自身の環境に合わせて変更してください。
killallで同じコトをしようとした場合は、終了させたいプロセス名を全て正確に1つずつ入力しなければなりませんが、pkillであれば下調べをして大丈夫だと確認出来ればこのように手間をだいぶ省くことが出来ます。
2.signalling pid XXXX : Operation not permitted
前の項で紹介したコマンドを実行した際に、Operation not permitted といった文章が表示されることがあります。
これは終了したいプロセスのユーザー権限がrootになっている場合に起こります。
rootとは管理者よりも上の権限を示すモノだとでも思っておいてください。
これをクリアするには各コマンドの前に、sudo という コマンドをつけます。
前の項の最後に紹介したコマンドを例に使うと、
$ sudo pkill -f -i Adobe
となります。
これを入力すると、パスワードを求められます。
特別root権限に関する設定をした記憶がなければ、ここで入力するパスワードはPCを起動させログインする際に入力するパスワードと同じです。
パスワードがあっていれば、無事実行されるはずです。
3.不要なプロセスを一括で終了させる
※何が不要かはご自身で判断する必要があります。
※毎回停止、終了させたいプロセスが決まっている場合に役立ちます。
利用するものは1の項で紹介したターミナルと、Macにデフォルトで入っているAutomatorというアプリケーションを使います。
つまり、1と2の項で説明したターミナルで実行する内容をAutomatorを使って自動化するというコトになります。
大まかな流れは以下になります。
- アクティビティモニタなどを使い不要なプロセスを確認・リストアップする
- killallコマンドが良いのか、pkillコマンドが良いのか実際にターミナルを使いながら検証する
※個人的にはpkillの方が良いです。 - ターミナルで実行した内容をAutomatorで実行出来るようにする
ターミナルの操作は前の項で理解、または元々出来る前提でここからは進めますので、Automatorの設定から話を進めたいと思います。
Automatorはターミナル同様ホットコーナーに設定してあるLaunchpadから起動してもよいですし、Finderを立ち上げアプリケーションの中から探してもよいです。
Automatorを立ち上げると下記画像のようなモノが表示されます。
アプリケーションを選択します。
次に左側にあるアクション一覧から「AppleScriptを実行」を選択します。
対象の項目をダブルクリックか、ドラッグで右側のスペースにドロップすることで選択出来ます。
選択すると、上記画像のように表示されますので、緑枠で囲った部分を書き換え命令文を打ち込んでいってください。
今回は1や2の項目で例に使用したAdobe関連のプロセスをpkillを利用して終了させる形で進めます。
do shell script "sudo pkill -9 -f -i adobe" password "" with administrator privileges
上記内容を緑枠の部分に入れます。
on run {input, parameters}
do shell script "sudo pkill -9 -f -i adobe" password "" with administrator privileges
return input
end run
という形になります。
コマンドの内容は、
sudo pkill -9 -f -i adobe
としています。
詳細な命令を指定するシグナルやオプションに関しましては1.の項で話しましたが、root権限でないと終わらせるコトができないプロセスもあるため、sudoを付けており、強制終了でないと終わらせることが出来ないプロセスもあるため-9というシグナルを指定しています。
各自の環境に合わせる場合は、以下の[]内の部分を変更すればOKというコトです。
do shell script “[ここにターミナルで指定するコマンドを入力]” password “” with administrator privileges
入力が完了したら、上記画像右上にある実行ボタンをクリックします。
すると、入力した内容が実行されパスワードの入力を求められます。
直接入力かTouch IDを実行し、成功すると上記画像下部にあるログの部分に完了しましたと出ます。
※上記実行をAutomatorで行う前にターミナルで先に終了させたいプロセスを全て止めてしまっているとエラー表示が出ます。
無事完了したら、作成したこのアプリケーションを保存します。
※ 「cmd + s」「ツールバー > ファイル > 保存 」などの手順で保存できます。
保存する際に名前を決めるのですが、名前の右側に「.app」という拡張子が付いていることを確認してください。
付いていない場合はつけてください。
example.app というような形になっていれば大丈夫です。
これで今後はこのアプリケーション実行することで対象のプロセスをターミナルを起動させることなく、一括で終了させるコトが出来るようになっています。
※今回のやり方だと実行後にパスワードは求められます。
他にもよいやり方があるかもしれませんが、毎回終了させたいプロセスが複数決まっていてその処理が面倒だと思われている方は参考にしてみてください。