考虑以下计划。
var util = require("util");
process.on("exit", function(){
util.puts("Hello World");
});
// Keep the program alive
setInterval(function(){}, 500);
上述程序等待直到收到终止信号。当流程退出时,我期待" Hello World"打印到标准。但是,在收到信号(我尝试过SIGTERM,SIGINT,SIGHUP和SIGKILL)后,应用程序无法打印消息。如果我删除setInterval
行以使进程自行退出,则会打印该消息。
当进程因信号退出时,如何让Node.JS向控制台(或文件)打印消息?
答案 0 :(得分:1)
如果你为SIGINT(中断信号)附加一个监听器, 您可以在process.exit侦听器或SIGINT侦听器中执行操作。
但是,您只能在process.exit块中执行同步操作,因为它只会在退出程序之前运行一次。
var util = require("util");
process.on("exit", function(){
util.puts("Hello World");
setTimeout(function(){
//Won't run code in here
util.puts("Something Async");
},1);
});
process.on("SIGINT", function(){
util.puts("You Pressed CTRL+C");
somethingAsync(function(err){
process.exit();
});
});
// Keep the program alive
setInterval(function(){}, 500);
//OUTPUTS:
//You Pressed CTRL+C
//Hello World
答案 1 :(得分:0)
您可以尝试readLine模块
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
//SIGINT gets triggered when a ctrl+c is done
rl.on('SIGINT', function() {
console.log('shutting down');
});