Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Listen for terminal session "close" event

In a terminal I start a background process A, which in turn starts a process B. Process B writes to the terminal (process A has passed B the correct TTY file descriptor).

What I am afraid of, is if the user (in some cases, me) closes the terminal window without sending process A or B a SIGINT. What could then happen is that process B will still attempt to write to the terminal even though it's been closed by the user. Worse, the user could open a new terminal window and it might assume the same identity / file descriptor that the other terminal had and then subsequently get written to by process B.

Basically, I am looking for a way to "listen" for terminal session events like terminal sessions being closed.

Is it possible to listen for such events inside a Node.js process? Perhaps there is a corresponding handler similar to process.on('SIGINT')?

I was guessing maybe the SIGTERM event was the event to listen to, but now after experimenting with the code, don't think that is it.

like image 327
Alexander Mills Avatar asked Nov 16 '16 04:11

Alexander Mills


1 Answers

You should look for SIGHUP (see also 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);
  });
});
like image 183
rishat Avatar answered Sep 19 '22 01:09

rishat