import os, sys, pty, time, select, signal
config, secs = sys.argv[1], float(sys.argv[2])
outfile, pidfile, marker = sys.argv[3], sys.argv[4], sys.argv[5]
for f in (marker,):
try:
os.remove(f)
except FileNotFoundError:
pass
pid, fd = pty.fork()
if pid == 0:
signal.signal(signal.SIGINT, signal.SIG_DFL)
os.execvp("sysg", ["sysg", "start", "--config", config])
with open(pidfile, "w") as f:
f.write(str(pid))
end = time.time() + secs
exited = None
with open(outfile, "wb") as out:
while time.time() < end:
r, _, _ = select.select([fd], [], [], 0.3)
if r:
try:
data = os.read(fd, 4096)
except OSError:
data = b""
if data:
out.write(data)
out.flush()
done, status = os.waitpid(pid, os.WNOHANG)
if done:
exited = os.waitstatus_to_exitcode(status)
break
if exited is not None:
with open(marker, "w") as f:
f.write(f"EXITED {exited}\n")