আমি দুটি সমাধান পেয়েছি, উভয়ই নিখুঁত নয়।
1. সিগন্যারএম সিগন্যাল পেলে সমস্ত শিশুকে হত্যা (-পিড) মারুন।
স্পষ্টতই, এই সমাধানটি "কিল -9" পরিচালনা করতে পারে না, তবে এটি বেশিরভাগ ক্ষেত্রে এবং খুব সহজ কাজ করে কারণ এটি সমস্ত শিশু প্রক্রিয়া মনে রাখার দরকার নেই।
var childProc = require('child_process').spawn('tail', ['-f', '/dev/null'], {stdio:'ignore'});
var counter=0;
setInterval(function(){
console.log('c '+(++counter));
},1000);
if (process.platform.slice(0,3) != 'win') {
function killMeAndChildren() {
/*
* On Linux/Unix(Include Mac OS X), kill (-pid) will kill process group, usually
* the process itself and children.
* On Windows, an JOB object has been applied to current process and children,
* so all children will be terminated if current process dies by anyway.
*/
console.log('kill process group');
process.kill(-process.pid, 'SIGKILL');
}
/*
* When you use "kill pid_of_this_process", this callback will be called
*/
process.on('SIGTERM', function(err){
console.log('SIGTERM');
killMeAndChildren();
});
}
একইভাবে, আপনি প্রসেস.এক্সিটিকে কোথাও কল করলে আপনি উপরের মতো 'প্রস্থান' হ্যান্ডলার ইনস্টল করতে পারেন। দ্রষ্টব্য: Ctrl + C এবং আকস্মিক ক্র্যাশ ওএস দ্বারা স্বয়ংক্রিয়ভাবে প্রক্রিয়া করা হয়েছে প্রক্রিয়া গোষ্ঠীটি হত্যা করার জন্য, সুতরাং এখানে আর নেই।
2.Use chjj / pty.js করার ডিম আপনার টার্মিনাল সংযুক্ত নিয়ন্ত্রণ সঙ্গে প্রক্রিয়া।
আপনি বর্তমান প্রক্রিয়াটিকে যেভাবেই মেরে ফেলেন এমনকি এমনকি হত্যা -9 করুন, সমস্ত শিশু প্রক্রিয়াগুলি স্বয়ংক্রিয়ভাবে মারা যাবে (ওএস দ্বারা?) আমি অনুমান করি যেহেতু বর্তমান প্রক্রিয়াটি টার্মিনালের অন্য দিকে ধারণ করে, সুতরাং যদি বর্তমান প্রক্রিয়াটি মারা যায় তবে শিশু প্রক্রিয়াটি এসআইপিআইপিইপিতে মারা যায় তাই মারা যায়।
var pty = require('pty.js');
//var term =
pty.spawn('any_child_process', [/*any arguments*/], {
name: 'xterm-color',
cols: 80,
rows: 30,
cwd: process.cwd(),
env: process.env
});
/*optionally you can install data handler
term.on('data', function(data) {
process.stdout.write(data);
});
term.write(.....);
*/