2016-11-16 15 views
5

端末ではバックグラウンドプロセスAを起動し、プロセスBを開始します。プロセスBは端末に書き込みます(プロセスAはBに正しいTTYファイルディスクリプタを渡しました)。端末セッション「クローズ」イベントをリッスンします

私が恐れているのは、プロセスAまたはBにSIGINTを送信せずに端末ウィンドウを閉じた場合です(場合によっては私)。その後、プロセスBは、ユーザによって閉じられているにもかかわらず、端末に書き込もうとします。さらに悪いことに、ユーザーは新しい端末ウィンドウを開くことができ、それは他の端末と同じアイデンティティ/ファイル記述子を仮定し、その後プロセスBによって書き込まれる可能性があります。

基本的に、私は " "ターミナルセッションのようなターミナルセッションイベントは閉じられます。

Node.jsプロセス内でこのようなイベントをリスンすることはできますか?おそらくprocess.on('SIGINT')に似た対応するハンドラがありますか?

私はおそらくSIGTERMイベントが聞こえるイベントだったと推測していましたが、コードを実験した後、それはそれだとは思わないでしょう。

答えて

6

あなたは(もall possible signals参照)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); 
    }); 
}); 
関連する問題