|
|
@@ -3,32 +3,33 @@
|
|
|
import psTree from "ps-tree"
|
|
|
import { exec } from "child_process"
|
|
|
|
|
|
-export const getProcessList = async (pid: number) => {
|
|
|
- const promise = new Promise<string>((resolve, reject) => {
|
|
|
- exec(`ps -p ${pid} -o pid=`, (err, stdout, stderr) => {
|
|
|
- if (err) {
|
|
|
- reject(stderr)
|
|
|
+const asyncExec = (command: string): Promise<{ stdout: string; stderr: string }> =>
|
|
|
+ new Promise((resolve, reject) => {
|
|
|
+ exec(command, (error, stdout, stderr) => {
|
|
|
+ if (error) {
|
|
|
+ reject(error)
|
|
|
+ } else {
|
|
|
+ resolve({ stdout, stderr })
|
|
|
}
|
|
|
-
|
|
|
- resolve(stdout)
|
|
|
})
|
|
|
})
|
|
|
|
|
|
+export const getProcessList = async (pid: number) => {
|
|
|
try {
|
|
|
- await promise
|
|
|
- } catch (_) {
|
|
|
- return null
|
|
|
- }
|
|
|
+ await asyncExec(`ps -p ${pid} -o pid=`)
|
|
|
|
|
|
- return new Promise<number[]>((resolve, reject) => {
|
|
|
- psTree(pid, (err, children) => {
|
|
|
- if (err) {
|
|
|
- reject(err)
|
|
|
- }
|
|
|
+ return new Promise<number[]>((resolve, reject) => {
|
|
|
+ psTree(pid, (err, children) => {
|
|
|
+ if (err) {
|
|
|
+ reject(err)
|
|
|
+ }
|
|
|
|
|
|
- resolve(children.map((p) => parseInt(p.PID)))
|
|
|
+ resolve(children.map((p) => parseInt(p.PID)))
|
|
|
+ })
|
|
|
})
|
|
|
- })
|
|
|
+ } catch (_) {
|
|
|
+ return null
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
export const killProcessTree = async (pid: number) => {
|
|
|
@@ -39,8 +40,16 @@ export const killProcessTree = async (pid: number) => {
|
|
|
}
|
|
|
|
|
|
if (descendants.length > 0) {
|
|
|
- await exec(`kill -9 ${descendants.join(" ")}`)
|
|
|
+ try {
|
|
|
+ await asyncExec(`kill -9 ${descendants.join(" ")}`)
|
|
|
+ } catch (error) {
|
|
|
+ console.error("Error killing descendant processes:", error)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- await exec(`kill -9 ${pid}`)
|
|
|
+ try {
|
|
|
+ await asyncExec(`kill -9 ${pid}`)
|
|
|
+ } catch (error) {
|
|
|
+ console.error("Error killing main process:", error)
|
|
|
+ }
|
|
|
}
|