听终端会话"关闭"事件

Ale*_*lls 5 terminal tty sigint node.js

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

我担心的是,如果用户(在某些情况下,我)关闭终端窗口而不发送进程A或B一个SIGINT.然后可能发生的是,即使用户关闭了进程B,进程B仍将尝试写入终端.更糟糕的是,用户可以打开一个新的终端窗口,它可能会采用与另一个终端相同的身份/文件描述符,然后由进程B写入.

基本上,我正在寻找一种"监听"终端会话事件的方法,例如终端会话被关闭.

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

我猜测也许SIGTERM事件是要听的事件,但现在在试验代码后,不要以为是这样.

ris*_*hat 6

你应该寻找SIGHUP(也参见所有可能的信号):

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);
  });
});
Run Code Online (Sandbox Code Playgroud)

  • 这个另一个问题以良好的布局列出了所有可能的信号并进行了解释:/sf/ask/282954101/ as-sigterm-sigquit#answer-29659703 (2认同)