fix: clean stale pid on stop (#1015)

This commit is contained in:
ekko
2026-05-25 13:31:12 +08:00
committed by GitHub
parent e1438490b8
commit 6e2e502a75
2 changed files with 30 additions and 2 deletions
+14 -2
View File
@@ -419,7 +419,14 @@ function startDaemon(port) {
}
function stopDaemon() {
const pid = getPid()
const pidFromFile = readPidFile()
if (pidFromFile && !isRunning(pidFromFile)) {
removePid()
console.log(` ✓ hermes-web-ui was not running (cleaned stale PID: ${pidFromFile})`)
return
}
const pid = pidFromFile ?? recoverPidFromPort()
if (!pid) {
console.log(' ✗ hermes-web-ui is not running')
process.exit(1)
@@ -442,7 +449,11 @@ function stopDaemon() {
} catch {}
// Force kill if still alive
if (isRunning(pid)) {
process.kill(pid, 'SIGKILL')
try {
process.kill(pid, 'SIGKILL')
} catch (err) {
if (err?.code !== 'ESRCH') throw err
}
}
removePid()
console.log(` ✓ hermes-web-ui stopped (PID: ${pid})`)
@@ -701,4 +712,5 @@ export {
getListeningPids,
parseUnixNetstatListeningPids,
resetDefaultLogin,
stopDaemon,
}
+16
View File
@@ -125,6 +125,22 @@ describe('CLI port detection', () => {
}
})
it('cleans a stale server PID file during stop', async () => {
const home = mkdtempSync(join(tmpdir(), 'hermes-web-ui-cli-stale-pid-'))
process.env.HERMES_WEB_UI_HOME = home
const pidFile = join(home, 'server.pid')
writeFileSync(pidFile, '999999999\n')
try {
const { stopDaemon } = await loadCli()
stopDaemon()
expect(existsSync(pidFile)).toBe(false)
} finally {
rmSync(home, { recursive: true, force: true })
}
})
it('resets an existing admin user to the default password', async () => {
const home = mkdtempSync(join(tmpdir(), 'hermes-web-ui-cli-default-login-'))
process.env.HERMES_WEB_UI_HOME = home