Node.js 等待process.kill终止进程
我的应用程序终止一个进程(exe文件),然后尝试用更新版本替换它,我正在使用Node.js 等待process.kill终止进程,node.js,Node.js,我的应用程序终止一个进程(exe文件),然后尝试用更新版本替换它,我正在使用进程。kill进程的pid,我在尝试用更新版本替换它时不断收到错误,因为exe文件仍在使用,无法删除,我已“解决”这需要等待500毫秒,但我不认为这是一个好的解决方案,我希望该方法是同步的,或者至少有一个同步对应物,就像其他fs方法一样 在node.js中还有其他方法吗?文档说明如下: 尽管此函数的名称为process.kill(),但它实际上只是一个信号发送器,就像kill系统调用一样。发送的信号可能会执行某些操作,而
进程。kill
进程的pid,我在尝试用更新版本替换它时不断收到错误,因为exe文件仍在使用,无法删除,我已“解决”这需要等待500毫秒,但我不认为这是一个好的解决方案,我希望该方法是同步的,或者至少有一个同步对应物,就像其他fs方法一样
在node.js中还有其他方法吗?文档说明如下: 尽管此函数的名称为
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)
})
这些文件说: 尽管此函数的名称为
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)
})
我相信知道进程是否真的被终止的唯一方法是订阅OS事件。Node.js应该如何知道操作系统实际上释放了进程的资源,以便可以进行诸如删除进程之类的操作?我认为知道进程是否真的被终止的唯一方法是订阅操作系统事件。Node.js如何知道操作系统实际上已经释放了用于进程的资源,以便可以进行操作(如删除它)?