Merge pull request #55 from tyfiero/Kill-all-processes-and-child-processes-with-ctrl-+-c
Add proper process handlingpull/58/head
commit
db235ab206
@ -0,0 +1,28 @@
|
|||||||
|
import os
|
||||||
|
import psutil
|
||||||
|
import signal
|
||||||
|
|
||||||
|
def kill_process_tree():
|
||||||
|
pid = os.getpid() # Get the current process ID
|
||||||
|
try:
|
||||||
|
# Send SIGTERM to the entire process group to ensure all processes are targeted
|
||||||
|
os.killpg(os.getpgid(pid), signal.SIGKILL)
|
||||||
|
parent = psutil.Process(pid)
|
||||||
|
children = parent.children(recursive=True)
|
||||||
|
for child in children:
|
||||||
|
print(f"Forcefully terminating child PID {child.pid}")
|
||||||
|
child.kill() # Forcefully kill the child process immediately
|
||||||
|
gone, still_alive = psutil.wait_procs(children, timeout=3)
|
||||||
|
|
||||||
|
if still_alive:
|
||||||
|
for child in still_alive:
|
||||||
|
print(f"Child PID {child.pid} still alive, attempting another kill")
|
||||||
|
child.kill()
|
||||||
|
|
||||||
|
print(f"Forcefully terminating parent PID {pid}")
|
||||||
|
parent.kill() # Forcefully kill the parent process immediately
|
||||||
|
parent.wait(3) # Wait for the parent process to terminate
|
||||||
|
except psutil.NoSuchProcess:
|
||||||
|
print(f"Process {pid} does not exist or is already terminated")
|
||||||
|
except psutil.AccessDenied:
|
||||||
|
print(f"Permission denied to terminate some processes")
|
Loading…
Reference in new issue