Это код, который я придумал.Кажется, работает должным образом и избегает слишком большого разбора строк.Имена переменных, которые я распаковываю, взяты из справочной страницы proc(5)
, и это, вероятно, лучший способ извлечения информации об ОС, чем разбор строк /proc/self/status
.
def get_vsize():
parts = open('/proc/self/stat').read().split()
(pid, comm, state, ppid, pgrp, session, tty, tpgid, flags, minflt, cminflt,
majflt, cmajflt, utime, stime, cutime, cstime, counter, priority, timeout,
itrealvalue, starttime, vsize, rss, rlim, startcode, endcode, startstack,
kstkesp, kstkeip, signal, blocked, sigignore, sigcatch, wchan,
) = parts[:35]
return int(vsize)
def memory_watcher():
while True:
time.sleep(120)
if get_vsize() > 120*1024*1024:
os.kill(0, signal.SIGTERM)