Skip to content

Instantly share code, notes, and snippets.

@unix-beard
Last active December 18, 2015 22:18
Show Gist options
  • Save unix-beard/5853262 to your computer and use it in GitHub Desktop.
Save unix-beard/5853262 to your computer and use it in GitHub Desktop.
#!/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