{"record":{"id":"8f267db1f358040d","repo":"jdx/mise","slug":"error-running-terminated-by-signal","errorCode":null,"errorMessage":"error running {}: terminated by signal\n{}","messagePattern":"error running (.+?): terminated by signal\n(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/plugins/asdf_plugin.rs","lineNumber":133,"sourceCode":"            Settings::get().fetch_remote_versions_timeout(),\n        )\n        .wrap_err_with(|| {\n            let script = script_man.get_script_path(&Script::ListAll);\n            eyre!(\"Failed to run {}\", display_path(script))\n        })?;\n        let stdout = String::from_utf8(result.stdout).unwrap();\n        let stderr = String::from_utf8(result.stderr).unwrap().trim().to_string();\n\n        let display_stderr = || {\n            if !stderr.is_empty() {\n                eprintln!(\"{stderr}\");\n            }\n        };\n        if !result.status.success() {\n            let s = Script::ListAll;\n            match result.status.code() {\n                Some(code) => bail!(\"error running {}: exited with code {}\\n{}\", s, code, stderr),\n                None => bail!(\"error running {}: terminated by signal\\n{}\", s, stderr),\n            };\n        } else if Settings::get().verbose {\n            display_stderr();\n        }\n\n        Ok(stdout\n            .split_whitespace()\n            .map(|v| regex!(r\"^v(\\d+)\").replace(v, \"$1\").to_string())\n            .collect())\n    }\n    pub(crate) fn fetch_latest_stable(\n        &self,\n        script_man: &ScriptManager,\n    ) -> eyre::Result<Option<String>> {\n        let latest_stable = script_man.read(&Script::LatestStable)?.trim().to_string();\n        Ok(if latest_stable.is_empty() {\n            None\n        } else {","sourceCodeStart":115,"sourceCodeEnd":151,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/plugins/asdf_plugin.rs#L115-L151","documentation":"Same code path as the exit-code variant: when the asdf plugin's list-all script is killed by a signal (status.code() is None), mise reports 'error running <script>: terminated by signal' with the captured stderr. This indicates the script was aborted abnormally rather than exiting with an error code.","triggerScenarios":"The plugin's bin/list-all process was killed — e.g. SIGKILL from the OOM killer, SIGTERM from a timeout/CI job cancellation, or SIGSEGV in a helper invoked by the script.","commonSituations":"Memory-constrained CI runners OOM-killing list-all; mise process managers or watchers terminating long-running plugin scripts; corrupted plugin scripts triggering crashes.","solutions":["Check dmesg/journalctl for OOM kills and rerun with more memory or fewer concurrent operations.","Reinstall the plugin (`mise plugin remove <name> && mise plugin add <name>`) to rule out a corrupted script.","Run `mise ls-remote <plugin>` alone with MISE_DEBUG=1 to reproduce and capture the signal context.","Inspect the plugin's list-all script for helpers that may crash (e.g. compiled binaries)."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"// detect signal termination and retry with backoff / fewer concurrency\ntry {\n  execSync('mise install erlang');\n} catch (e) {\n  if (/terminated by signal/.test(String(e.stderr))) {\n    await sleep(2000);\n    execSync('mise install erlang'); // e.g. after fixing OOM pressure\n  }\n}","preventionTips":["Give CI runners enough memory for plugin scripts; avoid parallel mise installs on small boxes.","Check dmesg/journalctl for OOM killer activity after this error.","Pin and reinstall plugins to rule out corrupted scripts."],"tags":["asdf","plugin","subprocess","signal"],"backgroundTag":"command-not-found","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}