2016-11-16 96 views
5

在終端中,我啓動後臺進程A,進而啓動進程B.進程B寫入終端(進程A已經傳遞了B正確的TTY文件描述符)。監聽終端會話「關閉」事件

我害怕的是如果用戶(在某些情況下,我)關閉終端窗口而不發送進程A或B SIGINT。然後可能發生的是,即使用戶關閉了進程B仍然會嘗試寫入終端。更糟糕的是,用戶可能會打開一個新的終端窗口,它可能會假設與另一個終端具有相同的身份/文件描述符,然後再通過進程B寫入。

基本上,我正在尋找一種方法來「偵聽「終端會話事件,如終端會話正在關閉。

是否有可能在Node.js過程中偵聽此類事件?也許有相應的處理程序類似於process.on('SIGINT')

我猜也許SIGTERM事件是聽的事件,但現在的代碼後試驗,不認爲是它。

回答

6

你應該尋找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); 
    }); 
});