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