2016-11-16 8 views
5

टर्मिनल में मैं पृष्ठभूमि प्रक्रिया ए शुरू करता हूं, जो बदले में एक प्रक्रिया शुरू करता है। प्रक्रिया बी टर्मिनल को लिखती है (प्रक्रिया ए बी को सही टीटीई फ़ाइल डिस्क्रिप्टर बी पास कर दिया है)।टर्मिनल सत्र "बंद करें" घटना के लिए सुनो

मुझे क्या डर है, यह है कि यदि उपयोगकर्ता (कुछ मामलों में, मुझे) प्रक्रिया ए या बी एक सिगिनट भेजने के बिना टर्मिनल विंडो बंद कर देता है। तब क्या हो सकता है कि प्रक्रिया बी अभी भी टर्मिनल को लिखने का प्रयास करेगी, भले ही इसे उपयोगकर्ता द्वारा बंद कर दिया गया हो। इससे भी बदतर, उपयोगकर्ता एक नई टर्मिनल विंडो खोल सकता है और यह वही पहचान/फ़ाइल डिस्क्रिप्टर मान सकता है जो अन्य टर्मिनल था और उसके बाद प्रक्रिया बी

मूल रूप से, मैं "सुनने के लिए एक तरीका ढूंढ रहा हूं "टर्मिनल सत्र की घटनाओं जैसे टर्मिनल सत्र बंद होने के लिए।

क्या ऐसी घटनाओं को नोड.जेएस प्रक्रिया के अंदर सुनना संभव है? शायद 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); 
    }); 
}); 
संबंधित मुद्दे