等待process.kill终止进程

时间:2020-04-30 09:42:09

标签: node.js

我的应用程序终止了一个进程(exe文件),然后尝试将其替换为更新的版本,我在进程的pid中使用了process.kill,在尝试将其替换为时我一直收到错误消息较新的版本,因为exe文件仍在使用中并且无法删除,我已经通过等待500毫秒来“解决”此问题,但是我称这不是一个好的解决方案,我期望该方法是同步的,或者至少具有同步功能就像其他fs方法一样。

在node.js中还有其他方法吗?

1 个答案:

答案 0 :(得分:2)

文档中的内容如下:

尽管此函数的名称为process.kill(),但实际上它只是一个信号发送器,如kill系统调用。发送的信号可能会杀死目标进程。

对我来说,这意味着process.kill并不表示进程已被终止,而仅表示已发送信号(返回时)。

但是还有另外一条有趣的话:

如果目标pid不存在,则此方法将引发错误。作为一种特殊情况,可以使用信号0来测试过程的存在。如果使用pid杀死进程组,Windows平台将引发错误。

所以您可以提出类似的信息:

const killProcess = ({pid, signal = 'SIGTERM', timeout} = {}) => new Promise((resolve, reject) => {
  process.kill(pid, signal);
  let count = 0;
  setInterval(() => {
    try {
      process.kill(pid, 0);
    } catch (e) {
      // the process does not exists anymore
      resolve();
    }
    if ((count += 100) > timeout) {
      reject(new Error("Timeout process kill"))
    }
  }, 100)
})