此答案只是用於提供entropo節點-FFI溶液的一個例子提出了(見上文)(如所提到的,將在Linux上工作):
這是父進程,它是產卵子,然後退出5秒後:
var spawn = require('child_process').spawn;
var node = spawn('node', [__dirname + '/child.js']);
setTimeout(function(){process.exit(0)}, 5000);
這是子進程(位於child.js)
var FFI = require('node-ffi');
var current = new FFI.Library(null, {"prctl": ["int32", ["int32", "uint32"]]})
//1: PR_SET_PDEATHSIG, 15: SIGTERM
var returned = current.prctl(1,15);
process.on('SIGTERM',function(){
//do something interesting
process.exit(1);
});
doNotExit = function(){
return true;
};
setInterval(doNotExit, 500);
而不current.prctl(1,15)即使父母死亡,孩子也會永遠跑步。這裏將會用SIGTERM發出信號,這將被優雅地處理。
「斷開」註冊我認爲這會工作。在關閉時,父母被殺,但我確信退出偵聽器仍然可以工作。也許我仍然可以[每隔幾秒檢查一次父進程ID](http://stackoverflow.com/questions/5566009/node-js-parent-process-id),如果它變成了數字1,那就意味着父代已經死了。 – 2011-04-06 12:03:58
如果您正在關閉,您的進程將首先收到「SIGTERM」。你可以捕獲這個,並以這種方式進行清理: 'process.on('SIGTERM',function(){ console.log('SIGTERM,exiting ...'); //在這裏做一些清理。 ... process.exit(0); });' – entropo 2011-04-06 17:07:44
是的,讓孩子定期檢查他們的'PPID'是否變成'1',這對父母沒有乾淨地離開的情況來說是一個很好的回退。另請參閱:http:// stackoverflow。com/questions/269494/how-can-i-cause-a-child-process-exit-when-the-parent-does – entropo 2011-04-06 17:25:11