diff --git a/instance/src/lib/utils.ts b/instance/src/lib/utils.ts index a941ba0..78f6f18 100644 --- a/instance/src/lib/utils.ts +++ b/instance/src/lib/utils.ts @@ -53,17 +53,20 @@ export function loop_process( on_start: opts?.on_start ?? async_noop, on_stop: opts?.on_stop ?? async_noop, }; + const control = { + do_continue: true, + child_process: null as null | Deno.ChildProcess, + }; const kill_sig = channel<"kill">(); + kill_sig.receive().then(() => { + control.do_continue = false; + control.child_process?.kill(); + }); async function launch() { - while (true) { + while (control.do_continue) { await events.on_start(); - const child_process = command.spawn(); - const result = await Promise.any([kill_sig.receive(), child_process.output()]); - if (result === "kill") { - await events.on_stop(); - child_process.kill(); - break; - } + control.child_process = command.spawn(); + await control.child_process.output(); await events.on_stop(); await sleep(opts?.delay ?? 500); }