Nodejs如何通过PID独立检查进程是否正在运行?

Tha*_*han 4 javascript child-process node.js

我用来child_process生成一个子进程并从中获取返回的 PID。我需要通过 PID 来管理这个子进程。下面是我的代码:

const childProcess = require('child_process');

let options = ['/c', arg1, arg2];

const myProcess = childProcess.spawn('cmd.exe', options, {
    detached: false,
    shell: false
});

let pid = myProcess.pid;
Run Code Online (Sandbox Code Playgroud)

在运行时,我想使用 PID独立于外部验证进程是否正在运行(已完成/已终止)。我想知道如何做到这一点以及在 Nodejs 中进行此验证的最佳方法是什么?我正在 Windows 环境中运行应用程序。

任何建议表示赞赏,谢谢。

Tha*_*han 5

我找到了一个解决方案作为is-running模块的建议。但我不想仅出于此目的将新模块安装到我的项目中,因此我创建了自己的checkRunning()函数,如下所示:

// Return true if process following pid is running
checkRunning(pid) {
    try {
        return process.kill(pid, 0);
    } catch (error) {
        console.error(error);
        return error.code === 'EPERM';
    }
}
Run Code Online (Sandbox Code Playgroud)

根据有关process.kill(pid[, signal])的 Nodejs 文档,我可以使用它process.kill()来检查特定参数值为 0 的进程是否存在signal(不是作为函数名称杀死进程)。

我复印了一份文件说:

作为一种特殊情况,信号 0 可用于测试进程是否存在