






















@@ -87,7 +87,8 @@ export async function ensureModelProviderLocalService(
87878888try {
8989if (
90-managed.process?.exitCode === null &&
90+managed.process &&
91+!hasLocalServiceProcessExited(managed.process) &&
9192(await probeHealth(healthUrl, healthHeaders, signal))
9293) {
9394return { release };
@@ -110,7 +111,7 @@ export async function ensureModelProviderLocalService(
110111});
111112}
112113await waitForAbort(managed.starting, signal);
113-if (!managed.process || managed.process.exitCode !== null) {
114+if (!managed.process || hasLocalServiceProcessExited(managed.process)) {
114115release();
115116return undefined;
116117}
@@ -232,7 +233,7 @@ async function startAndWaitForLocalService(params: {
232233if (await probeHealth(healthUrl, healthHeaders, signal)) {
233234return;
234235}
235-if (managed.process?.exitCode === null) {
236+if (managed.process && !hasLocalServiceProcessExited(managed.process)) {
236237log.info(`restarting unhealthy ${provider} local service`);
237238await stopManagedProcessForRestart(managed, signal);
238239}
@@ -321,7 +322,7 @@ function stopManagedService(key: string, managed: ManagedLocalService, reason: s
321322managed.process = undefined;
322323managed.lastExit = undefined;
323324services.delete(key);
324-if (child && child.exitCode === null) {
325+if (child && !hasLocalServiceProcessExited(child)) {
325326log.info(`stopping local model service: reason=${reason}`);
326327child.kill("SIGTERM");
327328}
@@ -334,12 +335,12 @@ async function stopManagedProcessForRestart(
334335const child = managed.process;
335336managed.process = undefined;
336337managed.lastExit = undefined;
337-if (!child || child.exitCode !== null) {
338+if (!child || hasLocalServiceProcessExited(child)) {
338339return;
339340}
340341child.kill("SIGTERM");
341342await waitForChildExit(child, signal, DEFAULT_PROBE_TIMEOUT_MS);
342-if (child.exitCode === null) {
343+if (!hasLocalServiceProcessExited(child)) {
343344child.kill("SIGKILL");
344345await waitForChildExit(child, signal, DEFAULT_PROBE_TIMEOUT_MS);
345346}
@@ -464,7 +465,7 @@ function waitForChildExit(
464465signal: AbortSignal,
465466timeoutMs: number,
466467): Promise<void> {
467-if (child.exitCode !== null) {
468+if (hasLocalServiceProcessExited(child)) {
468469return Promise.resolve();
469470}
470471throwIfAborted(signal);
@@ -490,3 +491,9 @@ function waitForChildExit(
490491signal.addEventListener("abort", onAbort, { once: true });
491492});
492493}
494+495+export function hasLocalServiceProcessExited(
496+child: Pick<ChildProcess, "exitCode" | "signalCode">,
497+): boolean {
498+return child.exitCode !== null || child.signalCode !== null;
499+}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。