监听终端会话 "close" 事件
Listen for terminal session "close" event
在终端中,我启动了一个后台进程 A,该进程又启动了一个进程 B。进程 B 写入终端(进程 A 已将正确的 TTY 文件描述符传递给 B)。
我担心的是,如果用户(在某些情况下,我)关闭终端 window 而不向进程 A 或 B 发送 SIGINT。然后可能发生的是进程 B 仍将尝试写入终端,即使它已被用户关闭。更糟糕的是,用户可以打开一个新终端window,它可能会采用与另一个终端相同的身份/文件描述符,然后被进程 B 写入。
基本上,我正在寻找一种方法来 "listen" 终端会话事件,例如终端会话被关闭。
是否可以在 Node.js 进程中监听此类事件?或许有类似process.on('SIGINT')
?
的对应handler
我猜也许 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);
});
});
在终端中,我启动了一个后台进程 A,该进程又启动了一个进程 B。进程 B 写入终端(进程 A 已将正确的 TTY 文件描述符传递给 B)。
我担心的是,如果用户(在某些情况下,我)关闭终端 window 而不向进程 A 或 B 发送 SIGINT。然后可能发生的是进程 B 仍将尝试写入终端,即使它已被用户关闭。更糟糕的是,用户可以打开一个新终端window,它可能会采用与另一个终端相同的身份/文件描述符,然后被进程 B 写入。
基本上,我正在寻找一种方法来 "listen" 终端会话事件,例如终端会话被关闭。
是否可以在 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);
});
});