diff --git a/src/__mocks__/service.mocks.js b/src/__mocks__/service.mocks.js index 8b90113..89f730f 100644 --- a/src/__mocks__/service.mocks.js +++ b/src/__mocks__/service.mocks.js @@ -47,6 +47,7 @@ export const mockOsService = { getWorkingDir: vi.fn(), listProcesses: vi.fn(), stopProcess: vi.fn(), + terminateProcess: vi.fn(), }; export const mockCodexGlobals = { diff --git a/src/handlers/processControl.js b/src/handlers/processControl.js index 407d830..8654555 100644 --- a/src/handlers/processControl.js +++ b/src/handlers/processControl.js @@ -25,9 +25,25 @@ export class ProcessControl { if (processes.length < 1) throw new Error("No codex process found"); const pid = processes[0].pid; + await this.stopProcess(pid); + }; + + stopProcess = async (pid) => { this.os.stopProcess(pid); await this.sleep(); - }; + + if (await this.isProcessRunning(pid)) { + this.os.terminateProcess(pid); + await this.sleep(); + } + } + + isProcessRunning = async (pid) => { + const processes = await this.os.listProcesses(); + const p = processes.filter((p) => p.pid == pid); + const result = p.length > 0; + return result; + } startCodexProcess = async () => { await this.saveCodexConfigFile(); diff --git a/src/services/osService.js b/src/services/osService.js index 2778b58..a42f384 100644 --- a/src/services/osService.js +++ b/src/services/osService.js @@ -29,4 +29,8 @@ export class OsService { stopProcess = (pid) => { process.kill(pid, "SIGINT"); }; + + terminateProcess = (pid) => { + process.kill(pid, "SIGTERM"); + } }