hibitekitou
プロセス監視
mac |2023-10-17
せっかく書いたスクリプトだけど要らなくなったので供養です。
事情としては、あるプロセスがちょっとその動作はどうなの?っていうメモリの消費の仕方をしていて、それを記録するために数秒置きにそのプロセスのメモリ使用量を記録したかった、ってのがありました。んが、どうもそのプロセスはIntel版でのみ起動してくるものらしくApple Silicon版には存在しないらしいことがわかり、Intel Mac環境が急速になくなっている状況下では意味がない取り組みということが判明しまして、なのでスクリプトをゴミ箱に捨てる前に供養しようかなというわけです。
以下のスクリプトが使用しているモジュールのうち、psutilは別途入れないとダメみたいです。topコマンドで取得したリストの何列目の値が監視したいものかは、もしかしたら環境によって違うかもしれません。スクリプト内の変数memColNumが適切な値になるように要調整ですw
import psutil import subprocess from subprocess import PIPE import re import datetime import signal import time import os #デスクトップのLogフォルダに記録を保存する logFilePath = os.path.join( os.environ['HOME'] , "Desktop" , "Log" ) #監視するプロスセス名を記入(スペースはバックスラッシュでエスケープする) #topコマンドで捕捉されるプロセス名じゃないとダメ。 #ちなみにAdobe Crash Processorが入っているのはスペースの入ったプロセス名を #扱うための例として使っているだけで、このアプリにメモリ使用量に関する罪はありません。 processName = "Adobe\ Crash\ Proc" cnt = 0 outPutInfo = [] memColNum = len( processName.split() ) + 7 def check(arg1, arg2): global logFilePath, cnt, outPutInfo , memColNum cmd = "top -l 1 | grep " + processName + "| awk '{print $" + str(memColNum) + "}'" proc = subprocess.run( cmd , shell=True, stdout=PIPE, stderr=PIPE, text=True ) try: if proc.returncode == 0: infoArr = ['',''] privateMem = proc.stdout[:-1] if privateMem[-1] == "K": privateMem = str( float( privateMem[:-1] ) / 1048576 ) if privateMem[-1] == "M": privateMem = str( float( privateMem[:-1] ) / 1024 ) elif privateMem[-1] == "G": privateMem = privateMem[:-1] dt_now = datetime.datetime.now().strftime('%H:%M:%S') infoArr = [ dt_now , privateMem ] outPutInfo.append( infoArr ) cnt += 1 print( cnt , infoArr ) if cnt > 720: outStr = "" tmpArr = dt_now.split(":") fileName = '-'.join( tmpArr ) for i in range( len( outPutInfo ) ): outStr += ( outPutInfo[i][0] + ',' + outPutInfo[i][1] + '\n') with open( os.path.join( logFilePath, fileName + '.txt' ), mode='w' ) as f: f.write( outStr ) cnt = 0 outPutInfo = [] except: print(processName + " is Dead") def main(): signal.signal(signal.SIGALRM, check) signal.setitimer(signal.ITIMER_REAL, 0.1, 5.0) while True: time.sleep(1) if __name__ == '__main__': main()
コメント ( 0 )|Trackback ( )
コメント |
コメントはありません。 |
![]() |
コメントを投稿する |
![]() |
ブログ作成者から承認されるまでコメントは反映されません |