affaan-m/ECC · error · Error

Command " " terminated by signal

Error message

Command "${commandName}" terminated by signal ${result.signal}

What it means

After spawnSync runs a subcommand, if the child did not exit normally but was killed by a signal, runCommand() throws 'Command "<name>" terminated by signal <signal>'. This surfaces signals like SIGINT or SIGSEGV instead of silently returning an exit code.

Solutions

  1. Inspect which signal was reported (e.g. SIGKILL suggests OOM, SIGSEGV suggests a crash) and address the root cause.
  2. Re-run the command; a one-off Ctrl+C just needs a retry.
  3. For SIGKILL during installs, free memory or increase the container/memory limits.
  4. Check CI timeout/signal settings if the command is being killed by the pipeline.

Example fix

// before
// child killed silently by SIGKILL in constrained container
// after
// raise memory limit then retry
NODE_OPTIONS=--max-old-space-size=2048 ecc install
Defensive patterns

Strategy: retry

Try / catch

try {
  process.exitCode = runCommand(name, args);
} catch (err) {
  const m = err.message.match(/terminated by signal (\w+)/);
  if (m) {
    console.error(`'${name}' was killed by ${m[1]}; check memory/timeout settings.`);
    process.exit(1);
  }
  throw err;
}

Prevention

When it happens

Trigger: The spawned script (process.execPath + command.script) is killed by a signal — user pressed Ctrl+C, the process OOM-killed (SIGKILL), segfaulted (SIGSEGV), or was terminated by a supervisor.

Common situations: Interrupting a long-running install with Ctrl+C, OOM killer terminating Node during heavy installs, signal-based CI timeouts, or a crashing native module in the child.

Related errors


AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16). Data as JSON: /api/errors/eb3544de1112355a. Report an issue: GitHub.

Appendix: source

Thrown at scripts/ecc.js:309

  if (result.error) {
    throw result.error;
  }

  if (result.stdout) {
    process.stdout.write(result.stdout);
  }

  if (result.stderr) {
    process.stderr.write(result.stderr);
  }

  if (typeof result.status === 'number') {
    return result.status;
  }

  if (result.signal) {
    throw new Error(`Command "${commandName}" terminated by signal ${result.signal}`);
  }

  return 1;
}

function main() {
  try {
    const resolution = resolveCommand(process.argv);

    if (resolution.mode === 'help') {
      showHelp(0);
    }

    if (resolution.mode === 'help-command') {
      if (!resolution.command) {
        showHelp(0);
      }

View on GitHub (pinned to 8321021c54)