【发布时间】:2011-07-11 17:54:39
【问题描述】:
我有一个通过 UNIX 套接字与子进程通信的主进程。当主进程收到 SIGQUIT 时,我无法写入孩子的套接字。我希望子进程知道主进程正在退出并优雅地退出。
SIGQUIT 陷阱之外的通信按预期完美运行。
这里有一些重现问题的示例代码。请记住,CRTL + \ 发送一个 SIGQUIT。 (CTRL + C 是 SIGINT)
主进程:test.js
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_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");
子进程不在我的控制范围内,并且使用掩码来屏蔽除 SIGKILL 和 SIGTERM 之外的所有信号。如果在 SIGQUIT 陷阱期间根本无法写入他们的套接字,那么除了套接字之外,还有其他方法可以与他们通信吗?
【问题讨论】:
-
一个很好的错误修复/功能请求候选人,您可能想在 nodejs 问题github.com/joyent/node/issues 中重复您的问题@
标签: sockets unix node.js child-process