40 lines
1.0 KiB
Python
40 lines
1.0 KiB
Python
import os
|
|
|
|
from twisted.internet.defer import succeed
|
|
|
|
|
|
class Processes:
|
|
def __init__(self, proc_dir="/proc"):
|
|
self._proc_dir = proc_dir
|
|
|
|
def register(self, sysinfo):
|
|
self._sysinfo = sysinfo
|
|
|
|
def run(self):
|
|
num_processes = 0
|
|
num_zombies = 0
|
|
for pid in os.listdir(self._proc_dir):
|
|
if not pid.isdigit():
|
|
continue
|
|
status_path = os.path.join(self._proc_dir, pid, "stat")
|
|
|
|
try:
|
|
with open(status_path, "rb") as fd:
|
|
data = fd.read()
|
|
except IOError:
|
|
continue
|
|
|
|
num_processes += 1
|
|
|
|
if b"Z" == data.split(b" ", 3)[2]:
|
|
num_zombies += 1
|
|
|
|
if num_zombies:
|
|
if num_zombies == 1:
|
|
msg = "There is 1 zombie process."
|
|
else:
|
|
msg = f"There are {num_zombies:d} zombie processes."
|
|
self._sysinfo.add_note(msg)
|
|
self._sysinfo.add_header("Processes", str(num_processes))
|
|
return succeed(None)
|