在终端中,我启动了后台进程A,然后又启动了进程B。进程B向终端写入(进程A已将正确的TTY文件描述符传递给B)。

我担心的是,如果用户(在某些情况下,我是)在不向进程A或B发送SIGINT的情况下关闭了终端窗口。然后可能发生的是,即使进程B被用户关闭,它仍将尝试写入终端。更糟糕的是,用户可能会打开一个新的终端窗口,并且可能会假定另一个终端具有相同的标识/文件描述符,然后由进程B写入。

基本上,我正在寻找一种“监听”终端 session 事件(例如关闭终端 session )的方法。

是否可以在Node.js进程中监听此类事件?也许有一个类似于process.on('SIGINT')的处理程序?

我猜想SIGTERM事件可能是要监听的事件,但是现在在尝试代码之后,不要以为是。

最佳答案

您应该寻找SIGHUP(另请参见all possible signals):

var http = require('http');
var fs = require('fs');

var server = http.createServer(function (req, res) {
  setTimeout(function () { //simulate a long request
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
  }, 4000);
}).listen(9090, function (err) {
  console.log('listening http://localhost:9090/');
  console.log('pid is ' + process.pid);
});

process.on('SIGHUP', function () {
  fs.writeFileSync(`${process.env.PWD}/sighup.txt`, `It happened at ${new Date().toJSON()}`);
  server.close(function () {
    process.exit(0);
  });
});

关于node.js - 监听终端 session "close"事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40623873/

10-16 20:42