1. import psutil
  2. import os
  3. import signal
  4. import logging
  5. import time
  6. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  7. def teardown_http_processes(script_name="teardown_script.py"):
  8. """
  9. Tear down processes associated with HTTP responses.
  10. """
  11. http_processes = []
  12. # Find processes potentially related to HTTP responses
  13. for proc in psutil.process_iter(['pid', 'name', 'cmdline']):
  14. try:
  15. if "http" in proc.info['name'].lower() or "python" in proc.info['cmdline'][0].lower() and "flask" in proc.info['cmdline'][0].lower() or "django" in proc.info['cmdline'][0].lower():
  16. http_processes.append(proc)
  17. except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
  18. pass
  19. if not http_processes:
  20. logging.info("No HTTP-related processes found.")
  21. return
  22. # Signal processes to terminate
  23. logging.info(f"Found {len(http_processes)} HTTP-related processes. Terminating...")
  24. for proc in http_processes:
  25. try:
  26. logging.info(f"Terminating process: PID={proc.pid}, Name={proc.info['name']}")
  27. proc.send_signal(signal.SIGTERM) #graceful termination
  28. time.sleep(2) # Give process time to shut down
  29. if proc.status() != psutil.STATUS_TERMINATED:
  30. logging.warning(f"Process PID={proc.pid} did not terminate gracefully. Sending SIGKILL.")
  31. proc.kill()
  32. except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
  33. logging.warning(f"Process PID={proc.pid} no longer exists.")
  34. except Exception as e:
  35. logging.error(f"Error terminating process PID={proc.pid}: {e}")
  36. logging.info("Process termination initiated.")
  37. if __name__ == "__main__":
  38. teardown_http_processes()

Add your comment