Javascript 如何防止Ctrl+;从杀死我的节点进程?
当我按下Ctrl+c时,我试图使用此函数延迟进程结束,但进程立即停止而不做任何操作Javascript 如何防止Ctrl+;从杀死我的节点进程?,javascript,node.js,Javascript,Node.js,当我按下Ctrl+c时,我试图使用此函数延迟进程结束,但进程立即停止而不做任何操作 (() => { ['SIGINT', 'SIGTERM', 'SIGQUIT'] .forEach(signal => process.on(signal, async () => { let promise = new Promise((res, rej) => { setTimeout(() =>
(() => {
['SIGINT', 'SIGTERM', 'SIGQUIT']
.forEach(signal => process.on(signal, async () => {
let promise = new Promise((res, rej) => {
setTimeout(() => res("Now it's done!"), 3000)
});
// wait until the promise returns us a value
let result = await promise;
// "Now it's done!"
console.log("=======================YESSSSSSSSSS=======================")
}));
})();
然而,这实际上并没有检查所有的事情是否都完成了。如果您有一些I/O操作正在进行,那么优雅地结束一个进程并不需要为它们设置一个大致的完成宽限期,而是让它们在完成后以某种方式报告,使用Promise.all()或其他方法
然而,这实际上并没有检查所有的事情是否都完成了。如果您有一些I/O操作正在进行,那么优雅地结束一个进程并不需要为它们设置一个大致的完成宽限期,而是让它们在完成后以某种方式报告,使用Promise.all()或其他任何东西。它不应该按照设置的方式做任何事情。如果不在进程上运行某些内容,该进程将不会保持打开状态。为了让这更容易,你的目标是什么?请注意,如果您只是尝试在后台运行节点进程,您可以使用“node myscript.js&”,或者作为服务使用pm2或类似的东西。同样,如果没有任何运行,进程将终止(pm2对于运行节点服务器很有用)@Caharpuka感谢您的回复。但是在关闭进程之前不应该首先解决承诺?您运行进程,它不会收到任何信号,也不会创建任何承诺,然后结束。这里没有什么可以让它等到收到信号。如果你想,你需要一些超时,让它在收到信号之前一直处于活动状态。你能告诉我怎么做吗?它不应该按照设置的方式做任何事情。如果不在进程上运行某些内容,该进程将不会保持打开状态。为了让这更容易,你的目标是什么?请注意,如果您只是尝试在后台运行节点进程,您可以使用“node myscript.js&”,或者作为服务使用pm2或类似的东西。同样,如果没有任何运行,进程将终止(pm2对于运行节点服务器很有用)@Caharpuka感谢您的回复。但是在关闭进程之前不应该首先解决承诺?您运行进程,它不会收到任何信号,也不会创建任何承诺,然后结束。这里没有什么可以让它等到收到信号。如果你想,你将需要一些超时,让它无限期地保持活动状态,直到收到信号。你能告诉我怎么做吗?
const wait = () => setTimeout(wait, 1000); // Loop to keep the process alive
process.on('SIGINT', () => {
setTimeout(() => {
/* Code to run before exiting */
process.exit()
}, 3000);
});
wait();