2011-07-11 13 views
1

私は、UNIXソケット経由で子プロセスと通信するマスタープロセスを持っています。マスタープロセスがSIGQUITを受け取ったときに子供のソケットに書き込むことができません。子プロセスは、マスターが終了して正常に終了したことを知りたいと思います。SIGQUIT中に子プロセスのソケットに書き込むことができないのはなぜですか?

SIGQUITトラップ以外の通信は、正常に動作します。

ここに問題を再現するサンプルコードがあります。 CRTL + \はSIGQUITを送信します。

マスター・プロセス(CTRL + CはSIGINTです):test_child.js

var net = require("net"); 

var socket = new net.Socket(); 
console.log("Started"); 
net.createServer(function (server_socket) { 
    server_socket.on('data', function(data) { 
    console.log(data.toString()); 
    }); 
    server_socket.write("This will appear"); 
}).listen("/tmp/node-sock"); 

子プロセスは、私のコントロール外である、とマスクを使用します。

var net = require("net"); 
var spawn = require("child_process").spawn; 

var socket = new net.Socket(); 

path_to_worker = process.cwd() + "/test_child.js" 

var child = spawn("node", [path_to_worker]); 
child.stdout.on('data', function (data) {process.stdout.write(data);}) 
setTimeout(function() { 
    socket.connect("/tmp/node-sock", function() { 
    socket.on('data', function(data) { 
     console.log(data.toString()); 
    }); 
    }); 
}, 100) 

process.on("SIGQUIT", function() { 
    socket.write("This won't appear"); 
}); 

子プロセスをtest.js SIGKILLとSIGTERMを除くすべてのシグナルをブロックします。 SIGQUITトラップ中にソケットに書き込むことができない場合は、ソケット以外の方法で通信する別の方法がありますか?

+0

バグ修正/機能要求のための良い候補、あなたはnodejsの問題にあなたの質問を繰り返したいかもしれませんhttps://github.com/joyent/node/issues –

答えて

0

Githibから、koichikは私の質問に答え: https://github.com/joyent/node/issues/1308#issuecomment-1552790

私はそれが動作、(C-ない)キル-SIGQUITによって親プロセスにSIGQUITを送りました。

$ node test.js 
Started 
This will appear 
This won't appear 

私はtest.jsにコードを追加し、C-を押します。

child.on('exit', function(code, signal) { 
    console.log(' child died', code, signal); 
}); 

結果:

$ node test.js 
Started 
This will appear 
^\ child died null SIGQUIT 

SIGQUITも子プロセスだけでなく、親プロセスに送信されました。 したがって、私はtest_child.jsにコードを追加しました。

process.on("SIGQUIT", function() { 
    console.log(' child received SIGQUIT'); 
}); 

結果:

$ node test.js 
Started 
This will appear 
^\ child received SIGQUIT 
This won't appear 
関連する問題