Macの手書き説明書

macOSのアプリ紹介と基本的な使い方を解説

バックグラウンドで開いているアプリを劇的に軽くするPythonスクリプト

Firefoxにその傾向が顕著なのですが、バックグラウンドで開いているだけでもかなりCPUを浪費します。

僕の環境ではバックグラウンドで開いていても10%前後かな。

バックグランドで開いているような時は特に操作する訳でもないのに、このCPU使用率は極悪。

まったく動作をして欲しくない場合には以下のようにkillallコマンドをSIGSTOPオプション付きで実行すればCPU使用率が0%になります。
killall -SIGSTOP firefox-bin

復帰するにはSIGCONTオプション
killall -SIGCONT firefox-bin

これをバックグラウンドになったら自動的にコマンドを実行、アクティブになったら復帰させるPythonスクリプトを日曜研究室さんが公開なされていたので試してみました。

ちょっと設定が必要ですが、バックグラウンド時のCPU使用率が0%になりシステムが軽くなることには間違いないので是非試してみてください。

まずこのスクリプトにはRuby,Python,Objective-CでAppleScriptライクな操作を行なうappscriptライブラリが必要なので、以下のコマンドをターミナルで実行してインストールします。
sudo easy_install appscript

パスワードを打ちこんで少し待つとインストールが完了するので、次は下記のテキストをコピーして適当なテキストエディタで「appsl.py」という名前で保存してください。
#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
application sleeper
'''

import os, sys, time
from subprocess import Popen, PIPE
from appscript import *

interval = 0.5

def main():
process_name = sys.argv[1]
my_filename = os.path.basename(__file__)

ps = Popen(['ps', 'x'], stdout = PIPE)
grep = Popen(['grep', process_name], stdin = ps.stdout, stdout = PIPE)
result = grep.communicate()[0]
procs = []
for line in result.split('\n'):
if 'grep' not in line and my_filename not in line and process_name in line:
pid = int(line.split()[0])
procs.append(dict(pid = pid, app = app(pid = pid), cont = True))

try:
while True:
time.sleep(interval)
for proc in procs:
os.system('/bin/kill -s SIGCONT %d' % proc['pid'])
if proc['app'].frontmost.get():
# frontmostなら停止しない
if not proc['cont']:
proc['cont'] = True
print 'continue %s' % proc['pid']
else:
# frontmostじゃないなら停止
os.system('/bin/kill -s SIGSTOP %d' % proc['pid'])
if proc['cont']:
proc['cont'] = False
print 'stop %s' % proc['pid']
except KeyboardInterrupt, e:
pass
finally:
# 終わる時はすべて再開しておく
print 'destructing...'
for proc in procs:
os.system('/bin/kill -s SIGCONT %d' % proc['pid'])
print 'continue %s' % proc['pid']

if __name__ == '__main__':
main()

保存できたら準備完了。

手軽に指定したアプリのバックグラウンドでの動作を劇的に軽くすることができます。
python appsl.py firefox-bin

Firefoxだけでなくすべてのアプリケーションで利用可能なので、バックグラウンドで動作している必要がなくて重いアプリには良い結果がでると思います。

スクリプトを停止させるにはターミナル上でControl+C

広告


関連記事

広告

この記事を共有する

広告

関連記事

0 Comments

Add your comment