大津です。 while(true) {} が終了しないので次のイベントループに回らないからだと思い ます。 (正確には tp.js の読み込みで1回分イベントループが回っていますが)
while(true) で回すのではなく process.nextTick() で再帰的にカウンター を回せば、おそらくシグナルウォッチャーのコールバックを受けることが できるはずです。 以下を試してみたらいかがでしょうか? ------------------------------------------------------- process.on('SIGUSR1', function (){ console.log("usr1."); process.exit(100); }); process.on('SIGINT', function (){ console.log("interrupted."); process.exit(200); }); process.on('exit', function (){ console.log("exit."); }); var c = 0; function output() { process.nextTick(function() { console.log("foo" + c); c++; // if (c == 10000) { // process.exit(10); // } output(); }); } output(); ------------------------------------------------------- (2012/04/26 23:23), Taro YACHI wrote: > やちといいます。 > > 環境: > FreeBSD 8.2R p3 > node v0.6.14 > > SIGINTとかのsignalをうけとりたいと思い、下記のようなcodeを書きました。 > > tp.js > ------------------------------------------------------- > process.on('SIGUSR1', function (){ > console.log("usr1."); > process.exit(100); > }); > process.on('SIGINT', function (){ > console.log("interrupted."); > process.exit(200); > }); > process.on('exit', function (){ > console.log("exit."); > }); > > var c = 0; > while(true){ > console.log("foo" + c); > c++; > // if (c == 10000) { > // process.exit(10); > // } > } > ------------------------------------------------------- > > で、$ node tp.js として、実行。他のterminalから$ killall -USR1 node としても、割り込みにより > console.logでの文言を出力したり、process.exit()によって止めたり出来ません。また、nodeを実行したterminalで > CTRL-Cをしても止まりません。 > SIGINTのprocess.on()を削ると、CTRL-Cで止まるので、trapは出来ているような気がしています。が、 > console.llogしている文言はいずれも出力されません。 > > なにか、指摘をお願いします。 >