import psutil
import time
import logging
import os
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def teardown_processes(process_arrays, retry_interval=1):
"""
Tear down processes from given arrays with retry intervals.
Args:
process_arrays (list of lists): A list of lists, where each inner list
contains process names to terminate.
retry_interval (int): The interval (in seconds) between retry attempts.
"""
for process_list in process_arrays:
for process_name in process_list:
max_retries = 5 # Set a maximum number of retries
retries = 0
while retries < max_retries:
try:
for proc in psutil.process_iter(['name']):
if proc.info['name'] == process_name:
proc.kill()
logging.info(f"Killed process: {process_name}")
break # Exit inner loop after killing the process
else:
logging.warning(f"Process {process_name} not found.")
break # exit retry loop if process not found
break # Exit outer loop if process is killed
except psutil.NoSuchProcess:
logging.warning(f"Process {process_name} already terminated.")
break
except Exception as e:
logging.error(f"Error terminating process {process_name}: {e}")
retries += 1
if retries < max_retries:
time.sleep(retry_interval)
if __name__ == '__main__':
# Example usage
process_arrays = [
['my_process_1', 'my_process_2'],
['another_process']
]
teardown_processes(process_arrays, retry_interval=0.5)
Add your comment