1. import time
  2. import psutil
  3. import os
  4. import signal
  5. def teardown_dom_processes(timeout_seconds=10):
  6. """
  7. Teardowns processes associated with DOM elements with a timeout.
  8. """
  9. start_time = time.time()
  10. # Get a list of all running processes
  11. processes = psutil.process_iter(['pid', 'name', 'cmdline'])
  12. while True:
  13. # Check for processes related to DOM elements
  14. for proc in processes:
  15. try:
  16. if "dom" in proc.info['name'].lower() or "chrome" in proc.info['name'].lower() or "firefox" in proc.info['name'].lower():
  17. # Attempt to terminate the process
  18. try:
  19. os.kill(proc.info['pid'], signal.SIGTERM) # Send SIGTERM signal
  20. print(f"Terminating process: {proc.info['name']} (PID: {proc.info['pid']})")
  21. except psutil.NoSuchProcess:
  22. pass # Process already terminated
  23. except OSError as e:
  24. print(f"Error terminating process {proc.info['name']} (PID: {proc.info['pid']}): {e}")
  25. except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
  26. pass # Process no longer exists or access is denied
  27. # Check if the timeout has been reached
  28. if time.time() - start_time > timeout_seconds:
  29. print("Timeout reached. Terminating remaining processes.")
  30. for proc in processes:
  31. try:
  32. os.kill(proc.info['pid'], signal.SIGTERM)
  33. except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
  34. pass
  35. break
  36. time.sleep(1) # Check every second
  37. print("Teardown complete.")
  38. if __name__ == '__main__':
  39. teardown_dom_processes()

Add your comment