NodeJS析构函数

代码:

function terminator(sig) { if (typeof sig === "string") { console.log('Received %s - terminating Node server ...', sig); process.exit(1); }; console.log('Node server stopped.'); }; process.on('exit', function() { terminator(); }); function terminatorSetup(element, index, array) { process.on(element, function() { terminator(element); }); }; ['SIGHUP', 'SIGINT', 'SIGQUIT', 'SIGILL', 'SIGTRAP', 'SIGABRT', 'SIGBUS', 'SIGFPE', 'SIGUSR1', 'SIGSEGV', 'SIGUSR2', 'SIGPIPE', 'SIGTERM'].forEach(terminatorSetup); 

不知何故,这不适用于Windows,退出与Ctrl + C不打印任何东西在控制台上,但是当我插入一个console.log(element);process.on(element, ...); 它工作得很好。 我错过了什么? 没有什么我在那里应该是asynchronousafaik。

Windows不支持信号 。 因此,您的信号处理程序从不触发,而是调用您的exit处理程序。 由于在这个处理程序中,您不需要任何参数就可以调用terminator() ,所以检查sig是一个string失败,因此不会打印任何内容。

另外请注意,在exit事件中调用process.exit()是多余的 – 进程即将退出,并没有停止。 我明白,你想使用这个逻辑的信号处理程序的过程中不需要退出所有情况下,但因为你不能在Windows上使用信号…

Interesting Posts