import time
import psutil
import os
import signal
def teardown_dom_processes(timeout_seconds=10):
"""
Teardowns processes associated with DOM elements with a timeout.
"""
start_time = time.time()
# Get a list of all running processes
processes = psutil.process_iter(['pid', 'name', 'cmdline'])
while True:
# Check for processes related to DOM elements
for proc in processes:
try:
if "dom" in proc.info['name'].lower() or "chrome" in proc.info['name'].lower() or "firefox" in proc.info['name'].lower():
# Attempt to terminate the process
try:
os.kill(proc.info['pid'], signal.SIGTERM) # Send SIGTERM signal
print(f"Terminating process: {proc.info['name']} (PID: {proc.info['pid']})")
except psutil.NoSuchProcess:
pass # Process already terminated
except OSError as e:
print(f"Error terminating process {proc.info['name']} (PID: {proc.info['pid']}): {e}")
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass # Process no longer exists or access is denied
# Check if the timeout has been reached
if time.time() - start_time > timeout_seconds:
print("Timeout reached. Terminating remaining processes.")
for proc in processes:
try:
os.kill(proc.info['pid'], signal.SIGTERM)
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
break
time.sleep(1) # Check every second
print("Teardown complete.")
if __name__ == '__main__':
teardown_dom_processes()
Add your comment