def check_process_exists(binary, attempts=1): """Checks if a process exists given the binary name. The `attempts` count allows us to control the time a process needs to settle until it becomes available. After each try the script will sleep for one second and retry. Returns True if it exists and False otherwise. """ for _ in range(attempts): for proc in find_user_processes([binary]): return True sleep(1) return False
def kill_matching_processes(binary_names, force=False): """Kills all processes with the given binary name, waiting for them to exit""" # Send all the signals before waiting so that processes can clean up in parallel. processes = list(find_user_processes(binary_names)) for process in processes: try: if force: process.kill() else: process.terminate() except psutil.NoSuchProcess: pass for process in processes: try: process.wait(KILL_TIMEOUT_IN_SECONDS) except psutil.TimeoutExpired: raise RuntimeError(("Unable to kill {process_name} (pid {process_pid}) " "after {num_seconds} seconds.").format( process_name=process.name, process_pid=process.pid, num_seconds=KILL_TIMEOUT_IN_SECONDS))
def kill_matching_processes(binary_names, force=False): """Kills all processes with the given binary name, waiting for them to exit""" # Send all the signals before waiting so that processes can clean up in parallel. processes = [proc for _, proc in find_user_processes(binary_names)] for process in processes: try: if force: process.kill() else: process.terminate() except psutil.NoSuchProcess: pass for process in processes: try: process.wait(KILL_TIMEOUT_IN_SECONDS) except psutil.TimeoutExpired: raise RuntimeError(("Unable to kill {process_name} (pid {process_pid}) " "after {num_seconds} seconds.").format( process_name=process.name, process_pid=process.pid, num_seconds=KILL_TIMEOUT_IN_SECONDS))