Last active
December 18, 2015 22:18
-
-
Save unix-beard/5853262 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import re | |
import os | |
import time | |
import signal | |
import sys | |
class TopState: | |
Running = 1 | |
NotRunning = 2 | |
topState = TopState.NotRunning | |
def pid_dirs_only(list, filter): | |
return [l for l in list if filter.search(l)] | |
def is_ps_monitoring_tool(process_name): | |
return any(process_name in s for s in ['(ps)', '(top)']) | |
def rescan(): | |
global proc_pids | |
print("Rescaning...") | |
for pid in pid_dirs_only(os.listdir('/proc'), re.compile('^[0-9]+$')): | |
try: | |
with open('/proc/' + pid + '/stat', 'r') as f: | |
status = f.readline().split() | |
if is_ps_monitoring_tool(status[1]): | |
print('{0} {1} is running'.format(status[0], status[1])) | |
return TopState.Running | |
except FileNotFoundError as err: | |
pass | |
print("Done") | |
return TopState.NotRunning | |
prev = 0 | |
cur = 0 | |
def main(): | |
global prev | |
global cur | |
while True: | |
with open('/proc/loadavg', 'r') as f: | |
cur = int(f.readline().split()[3].split('/')[1]) | |
if prev != cur: | |
prev = cur | |
if rescan() == TopState.Running: | |
print("Hide") | |
else: | |
print("Show") | |
time.sleep(0.001) | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment