我在nodejs应用中使用nodemon在更改应用时自动重启。但是当我停止使用' Ctrl + C'在ubuntu环境中,不会停止nodejs。我必须搜索从端口运行的进程,并且必须使用kill -9手动终止。我该如何解决这个问题?
答案 0 :(得分:0)
快速而肮脏的解决方案
process.on('SIGTERM', stopHandler);
process.on('SIGINT', stopHandler);
process.on('SIGHUP', stopHandler);
function stopHandler() {
console.log('Stopped forcefully');
process.exit(0);
}
正确的解决方案
实施Graceful Shutdown
是最佳做法。在这个例子中,我应该只停止服务器。如果服务器停止的时间超过2秒,则进程将以exitcode 1
终止。
process.on('SIGTERM', stopHandler);
process.on('SIGINT', stopHandler);
process.on('SIGHUP', stopHandler);
async function stopHandler() {
console.log('Stopping...');
const timeoutId = setTimeout(() => {
process.exit(1);
console.error('Stopped forcefully, not all connection was closed');
}, 2000);
try {
await server.stop();
clearTimeout(timeoutId);
} catch (error) {
console.error(error, 'Error during stop.');
process.exit(1);
}
}