import psutil
import os
import signal
import logging
import time
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def teardown_http_processes(script_name="teardown_script.py"):
"""
Tear down processes associated with HTTP responses.
"""
http_processes = []
# Find processes potentially related to HTTP responses
for proc in psutil.process_iter(['pid', 'name', 'cmdline']):
try:
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():
http_processes.append(proc)
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
if not http_processes:
logging.info("No HTTP-related processes found.")
return
# Signal processes to terminate
logging.info(f"Found {len(http_processes)} HTTP-related processes. Terminating...")
for proc in http_processes:
try:
logging.info(f"Terminating process: PID={proc.pid}, Name={proc.info['name']}")
proc.send_signal(signal.SIGTERM) #graceful termination
time.sleep(2) # Give process time to shut down
if proc.status() != psutil.STATUS_TERMINATED:
logging.warning(f"Process PID={proc.pid} did not terminate gracefully. Sending SIGKILL.")
proc.kill()
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
logging.warning(f"Process PID={proc.pid} no longer exists.")
except Exception as e:
logging.error(f"Error terminating process PID={proc.pid}: {e}")
logging.info("Process termination initiated.")
if __name__ == "__main__":
teardown_http_processes()
Add your comment