如何防止Ctrl + C杀死我的节点进程?

时间:2019-11-13 22:02:11

标签: javascript node.js

我正在尝试使用此功能来延迟按Ctrl + c时进程的结束,但是该进程会立即停止而不执行任何操作。

(() => {
    ['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=======================")

    }));
})();

1 个答案:

答案 0 :(得分:0)

const wait = () => setTimeout(wait, 1000); // Loop to keep the process alive

process.on('SIGINT', () => {
        setTimeout(() => {
                /* Code to run before exiting */
                process.exit()
        }, 3000);
});

wait();

但是,这实际上并不检查是否已完成所有操作。如果发生一些I / O操作,则优雅地结束进程并不涉及为完成设置宽限期,而是让它们使用Promise.all()或其他方式以某种方式向他们报告完成后的情况。