import json import subprocess # Can spawn multiple paxos server if __name__ == "__main__": processes = [] with open("config.json", encoding='utf-8') as f: json_dict = json.loads(f.read()) addresses = json_dict["servers"] try: for i in range(0, len(addresses), 2): paxos_host = addresses[i] paxos_port = addresses[i + 1] proc = subprocess.Popen(["python3", "mencius.py", paxos_host, paxos_port] + addresses) processes.append(proc) # Needed to sleep forever here until ctrl-c so we go into "finally" and kill processes input_str = input() # Input would be "lock 2" / "unlock 1", etc or "exit" while input_str != "exit": command, node = input_str.split(" ", 2) node = int(node) if node > len(addresses) / 2: print("Node does not exists") elif command == "kill": print(f"Killing node ({addresses[node*2]}, {addresses[(node*2) + 1]})") processes[node].kill() elif command == "run": print(f"Bringing back up node number ({addresses[node*2]}, {addresses[(node*2) + 1]})") paxos_host = addresses[node*2] paxos_port = addresses[(node*2) + 1] processes[node] = subprocess.Popen(["python3", "mencius.py", paxos_host, paxos_port] + addresses) input_str = input() finally: for proc in processes: # proc.send_signal(signal.SIGINT) proc.kill()