#! /usr/bin/env python import os, time, sys WAIT_FOR = {'mplayer': True, 'mpg123': True, 'flac123': True, 'ogle': True, 'copytorrent.py': True, } LOAD_LIMIT = 0 MOD = {} if len(sys.argv) > 1: WAIT_FOR.clear() for name in sys.argv[1:]: if name.startswith('--mod='): MOD[name[len('--mod='):]] = None continue try: LOAD_LIMIT = float(name) except ValueError: WAIT_FOR[name] = True mypidname = str(os.getpid()) repeat = 0 while True: wait_for = [] if WAIT_FOR: for pidname in os.listdir('/proc'): if not pidname.isdigit() or pidname == mypidname: continue try: name = os.path.basename(os.readlink('/proc/%s/exe' % pidname)) if name in WAIT_FOR: wait_for.append(name) except OSError: pass if LOAD_LIMIT > 0: #if LOAD_LIMIT > 800: # f = open('/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq', # 'r') # loadavg = f.read().strip() # f.close() # loadavg = int(loadavg) // 1000 #else: f = open('/proc/loadavg', 'r') loadavg = f.readline().split()[0] f.close() if float(loadavg) >= LOAD_LIMIT: wait_for.append('loadavg: %s >= %s' % (loadavg, LOAD_LIMIT)) if MOD: for name, prevvalue in MOD.items(): try: st = os.stat(name) value = (st.st_size, st.st_mtime) except OSError: value = None if value != prevvalue: MOD[name] = value wait_for.append('--mod=%s' % (name,)) if wait_for: print 'Waiting for', for name in wait_for: print '[%s]' % (name,), print repeat = 0 else: if repeat == 3: break print 'Done, %d seconds until exit...' % (6 - 2*repeat,) repeat += 1 time.sleep(2) print 'Exit.'