From 7661d829cbe76f55e8264c064feb1844a23e78dd Mon Sep 17 00:00:00 2001 From: ThatBen Date: Mon, 14 Apr 2025 13:25:51 +0200 Subject: [PATCH] working example of detecting a running codex instance and stopping it --- package-lock.json | 15 ++++++++++++++- package.json | 7 ++++--- src/handlers/processControl.js | 28 ++++++++++++++++++++++++++++ src/main.js | 3 ++- src/services/configService.js | 2 +- 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6cb0ec4..6a5cb4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,8 @@ "inquirer": "^9.2.12", "mime-types": "^2.1.35", "nanospinner": "^1.1.0", - "open": "^10.1.0" + "open": "^10.1.0", + "ps-list": "^8.1.1" }, "bin": { "codexstorage": "index.js" @@ -1947,6 +1948,18 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/ps-list": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.1.tgz", + "integrity": "sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ramda": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", diff --git a/package.json b/package.json index 602892b..685a81e 100644 --- a/package.json +++ b/package.json @@ -27,12 +27,13 @@ "axios": "^1.6.2", "boxen": "^7.1.1", "chalk": "^5.3.0", + "fs-extra": "^11.3.0", + "fs-filesystem": "^2.1.2", "inquirer": "^9.2.12", "mime-types": "^2.1.35", "nanospinner": "^1.1.0", - "fs-extra": "^11.3.0", - "fs-filesystem": "^2.1.2", - "open": "^10.1.0" + "open": "^10.1.0", + "ps-list": "^8.1.1" }, "devDependencies": { "prettier": "^3.4.2", diff --git a/src/handlers/processControl.js b/src/handlers/processControl.js index 96e6782..30c0119 100644 --- a/src/handlers/processControl.js +++ b/src/handlers/processControl.js @@ -1,5 +1,6 @@ import fs from "fs"; import { spawn, exec } from "child_process"; +import psList from 'ps-list'; export class ProcessControl { constructor(configService, shellService, osService, fsService) { @@ -21,6 +22,33 @@ export class ProcessControl { } }; + detectThing = async () => { + console.log("detecting..."); + + const processes = await psList(); + const codexProcesses = processes.filter((p) => p.name === "codex.exe"); + if (codexProcesses.length > 0) { + console.log("Codex is already running."); + codexProcesses.forEach((p) => { + console.log(`PID: ${JSON.stringify(p)}`); + }); + + console.log("Stopping codex..."); + await this.stopThing(codexProcesses[0].pid); + await this.detectThing(); + } else { + console.log("Codex is not running."); + } + } + + stopThing = async (pid) => { + console.log("stopping process..."); + + process.kill(pid, "SIGINT"); + + await new Promise((resolve) => setTimeout(resolve, 2000)); + } + doThing = async () => { if (this.config.dataDir.length < 1) throw new Error("Missing config: dataDir"); diff --git a/src/main.js b/src/main.js index 87eb716..b7ad534 100644 --- a/src/main.js +++ b/src/main.js @@ -139,7 +139,8 @@ export async function main() { osService, fsService, ); - await processControl.doThing(); + //await processControl.doThing(); + await processControl.detectThing(); return; await mainMenu.show(); diff --git a/src/services/configService.js b/src/services/configService.js index 6570220..1df6c13 100644 --- a/src/services/configService.js +++ b/src/services/configService.js @@ -92,7 +92,7 @@ export class ConfigService { `api-port=${this.config.ports.apiPort}${nl}` + `nat="extip:${publicIp}"${nl}` + `api-cors-origin="*"${nl}` + - `bootstrap-node=[${bootNodes}]`, + `bootstrap-node=[${bootNodes}]${nl}`, ); };