如何在Node.JS进程退出事件上打印输出

时间:2014-12-23 14:17:54

标签: node.js signals

考虑以下计划。

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向控制台(或文件)打印消息?

2 个答案:

答案 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');
});