import psutil
import os
import signal
import time
import argparse
def find_processes_in_directory(directory):
"""Finds all running processes associated with a directory."""
processes = []
for proc in psutil.process_iter(['pid', 'name', 'exe', 'cwd']):
try:
if proc.info['cwd'] == os.path.abspath(directory):
processes.append(proc)
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return processes
def kill_processes_in_directory(directory, dry_run=True):
"""Kills processes in a directory. Dry-run mode prevents actual termination."""
processes = find_processes_in_directory(directory)
if not processes:
print(f"No processes found in directory: {directory}")
return
if dry_run:
print(f"Dry-run: Would kill the following processes in {directory}:")
for proc in processes:
print(f" PID: {proc.info['pid']}, Name: {proc.info['name']}, Executable: {proc.info['exe']}")
else:
print(f"Killing processes in {directory}:")
for proc in processes:
try:
proc.kill() # Terminate the process
print(f" Killed PID: {proc.info['pid']}")
except psutil.NoSuchProcess:
print(f" Process {proc.info['pid']} already gone.")
except psutil.AccessDenied:
print(f" Access denied to kill process {proc.info['pid']}.")
except psutil.ZombieProcess:
print(f" Process {proc.info['pid']} is a zombie.")
def main():
"""Main function to handle command-line arguments and execute."""
parser = argparse.ArgumentParser(description="Teardown processes in a directory (dry-run or real).")
parser.add_argument("directory", help="The directory to teardown processes from.")
parser.add_argument("-r", "--real", action="store_true", help="Execute in real mode (kill processes).")
parser.add_argument("-n", "--dry-run", action="store_false", dest="real", help="Execute in dry-run mode.")
args = parser.parse_args()
directory = args.directory
real_mode = args.real
if not os.path.isdir(directory):
print(f"Error: {directory} is not a valid directory.")
return
kill_processes_in_directory(directory, dry_run=not real_mode)
if __name__ == "__main__":
main()
Add your comment