

























@@ -10,7 +10,7 @@ import { boundaryTestFiles } from "../test/vitest/vitest.unit-paths.mjs";
1010import { resolveLocalVitestEnv } from "./lib/vitest-local-scheduling.mjs";
1111import { spawnPnpmRunner } from "./pnpm-runner.mjs";
1212import {
13-forwardSignalToVitestProcessGroup,
13+forceKillVitestProcessGroup,
1414installVitestProcessGroupCleanup,
1515shouldUseDetachedVitestProcessGroup,
1616} from "./vitest-process-group.mjs";
@@ -994,11 +994,19 @@ export function spawnWatchedVitestProcess({
994994 label,
995995 onNoOutputTimeout,
996996}) {
997+let forwardedSignal = null;
997998const child = spawnVitestProcess({
998999 pnpmArgs,
9991000 spawnParams,
10001001});
1001-const teardownChildCleanup = installVitestProcessGroupCleanup({ child });
1002+const teardownChildCleanup = installVitestProcessGroupCleanup({
1003+ child,
1004+forceSignal: "SIGKILL",
1005+forceSignalDelayMs: 100,
1006+onSignal: (signal) => {
1007+forwardedSignal ??= signal;
1008+},
1009+});
10021010const teardownNoOutputWatchdog = installVitestNoOutputWatchdog({
10031011streams: [child.stdout, child.stderr],
10041012timeoutMs: resolveVitestNoOutputTimeoutMs(env),
@@ -1028,6 +1036,7 @@ export function spawnWatchedVitestProcess({
1028103610291037return {
10301038 child,
1039+getForwardedSignal: () => forwardedSignal,
10311040teardown: () => {
10321041teardownChildCleanup();
10331042teardownNoOutputWatchdog();
@@ -1054,13 +1063,19 @@ export function resolveTestProjectsRunnerSpawnParams(env, platform = process.pla
10541063}
1055106410561065function spawnTestProjectsRunner(argv, env) {
1066+let forwardedSignal = null;
10571067const child = spawn(process.execPath, [testProjectsRunnerPath, ...argv], {
10581068 ...resolveTestProjectsRunnerSpawnParams(env),
10591069});
10601070const teardown = installVitestProcessGroupCleanup({
10611071 child,
1072+forceSignal: "SIGKILL",
1073+forceSignalDelayMs: 100,
1074+onSignal: (signal) => {
1075+forwardedSignal ??= signal;
1076+},
10621077});
1063-return { child, teardown };
1078+return { child, getForwardedSignal: () => forwardedSignal, teardown };
10641079}
1065108010661081function main(argv = process.argv.slice(2), env = process.env) {
@@ -1082,9 +1097,15 @@ function main(argv = process.argv.slice(2), env = process.env) {
1082109710831098const delegatedArgs = resolveTestProjectsDelegationArgs(argv);
10841099if (delegatedArgs) {
1085-const { child, teardown } = spawnTestProjectsRunner(delegatedArgs, env);
1100+const { child, getForwardedSignal, teardown } = spawnTestProjectsRunner(delegatedArgs, env);
10861101child.on("exit", (code, signal) => {
10871102teardown();
1103+const forwardedSignal = getForwardedSignal();
1104+if (forwardedSignal) {
1105+forceKillVitestProcessGroup(child);
1106+process.kill(process.pid, forwardedSignal);
1107+return;
1108+}
10881109if (signal) {
10891110process.kill(process.pid, signal);
10901111return;
@@ -1113,7 +1134,7 @@ function main(argv = process.argv.slice(2), env = process.env) {
11131134throw error;
11141135}
111511361116-const { child, teardown } = spawnWatchedVitestProcess({
1137+const { child, getForwardedSignal, teardown } = spawnWatchedVitestProcess({
11171138pnpmArgs: ["exec", "node", ...resolveVitestNodeArgs(env), vitestCliEntry, ...guardedVitestArgs],
11181139spawnParams: resolveVitestSpawnParams(spawnEnv),
11191140env: spawnEnv,
@@ -1122,6 +1143,12 @@ function main(argv = process.argv.slice(2), env = process.env) {
1122114311231144child.on("exit", (code, signal) => {
11241145teardown();
1146+const forwardedSignal = getForwardedSignal();
1147+if (forwardedSignal) {
1148+forceKillVitestProcessGroup(child);
1149+process.kill(process.pid, forwardedSignal);
1150+return;
1151+}
11251152if (signal) {
11261153process.kill(process.pid, signal);
11271154return;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。