rohitg00/agentmemory · error
EPERM
EPERM
Error message
No permission to signal pid ${pid}. Try: kill ${pid} What it means
Warning from the stop/kill routine when process.kill(pid, signal) fails with EPERM — the OS refused to signal the target process because the current user lacks permission. The engine is NOT stopped by this attempt.
Source
Thrown at src/cli.ts:3265
}
return true;
} catch (err) {
return (err as NodeJS.ErrnoException)?.code === "EPERM";
}
}
async function signalAndWait(
pid: number,
initialSignal: NodeJS.Signals,
timeoutMs: number,
): Promise<boolean> {
try {
process.kill(pid, initialSignal);
} catch (err) {
const code = (err as NodeJS.ErrnoException)?.code;
if (code === "ESRCH") return true;
if (code === "EPERM") {
p.log.warn(`No permission to signal pid ${pid}. Try: kill ${pid}`);
return false;
}
vlog(`${initialSignal} ${pid}: ${err instanceof Error ? err.message : String(err)}`);
return false;
}
const deadline = Date.now() + timeoutMs;
while (Date.now() < deadline) {
if (!pidAlive(pid)) return true;
await new Promise((r) => setTimeout(r, 200));
}
if (!pidAlive(pid)) return true;
try {
process.kill(pid, "SIGKILL");
} catch (err) {
if ((err as NodeJS.ErrnoException)?.code === "ESRCH") return true;
vlog(`SIGKILL ${pid}: ${err instanceof Error ? err.message : String(err)}`);
return false;
}View on GitHub (pinned to e04ba88819)
Solutions
- Run the same kill command with sudo: `sudo kill <pid>`
- Stop the process as the user who started it (log in as that user and stop the engine)
- If it is a stale foreign pidfile, remove ~/.agentmemory/iii.pid after confirming the process is not yours
Example fix
// before $ agentmemory stop warn: No permission to signal pid 4321. Try: kill 4321 // after $ sudo kill 4321
Defensive patterns
Strategy: try-catch
Validate before calling
const os = require("os");
function canSignal(pid) { try { process.kill(pid, 0); return true; } catch (e) { return e.code === "EPERM" ? "eprem" : false; } } Type guard
function isEperm(e: unknown): e is NodeJS.ErrnoException { return (e as NodeJS.ErrnoException)?.code === "EPERM"; } Try / catch
try { process.kill(pid, signal); } catch (err) {
if ((err as NodeJS.ErrnoException)?.code === "EPERM") {
console.warn(`Permission denied for pid ${pid}; retry with sudo kill ${pid}`);
}
} Prevention
- Run the engine as the same user that later stops it
- Avoid starting the daemon with sudo
- Check pid ownership (ps -o user -p <pid>) before killing
When it happens
Trigger: Calling the stop command where the recorded/listed pid belongs to a process owned by another user (e.g. a daemon started by root or another account).
Common situations: Engine previously started with sudo, mixed-user installs, containers where the pid is owned by a different uid, shared dev servers.
Related errors
- ${adapter.displayName}: guideline not written (${gerr instan
- Global install failed. Try manually: npm install -g @agentme
- Engine not responding on :${port}, but ${survivors.size} pro
- --force: bypassing Docker-heuristic guard. Falling back to n
- Could not update ~/.agentmemory/.env. Set AGENTMEMORY_INJECT
AI-assisted analysis of rohitg00/agentmemory@e04ba88819 (2026-08-30).
Data as JSON: /api/errors/aae7e437867a33e4.
Report an issue: GitHub.