私は、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トラップ中にソケットに書き込むことができない場合は、ソケット以外の方法で通信する別の方法がありますか?
バグ修正/機能要求のための良い候補、あなたはnodejsの問題にあなたの質問を繰り返したいかもしれませんhttps://github.com/joyent/node/issues –