import os,sys,json,resource,subprocess,signal,time from contextlib import nullcontext from pathlib import Path base=Path(__file__).parent resource.setrlimit(resource.RLIMIT_MEMLOCK,(resource.RLIM_INFINITY,resource.RLIM_INFINITY)) cfg=json.loads((base/"command-serial.json").read_text()) env=os.environ.copy();env.update(cfg["env"]) log=base/sys.argv[1] if len(sys.argv)>1 else None with log.open("w") if log else nullcontext(None) as f: p=subprocess.Popen(cfg["args"],env=env,stdout=f,stderr=subprocess.STDOUT,start_new_session=True,cwd="/workspace/pytorch") (base/"serve.pid").write_text(str(p.pid)) print("SERVER_PID",p.pid,"LOG",log if log else "stdout",flush=True) rc=p.wait() print("SERVER_EXIT",rc,flush=True) if rc: try: os.killpg(p.pid,signal.SIGTERM) except ProcessLookupError: pass time.sleep(3) try: os.killpg(p.pid,signal.SIGKILL) except ProcessLookupError: pass sys.exit(rc)