我正在使用node.js + socket.io编写一个类似web的linux shell。像ls,cd这样的简单命令运行良好。 但是当ping google.com这样的问题命令时,stdout无休止地打印。 我试图将Ctrl + C发送到stdin,但没有运气。
1)产生'bash'过程
spawn = require('child_process').spawn;
var sh = spawn('bash');
2)将bash stdout发送到socket.io
sh.stdout.on('data', function(data) {
console.log('stdout' + data);
listener.sockets.emit("stdout",new Buffer(data));
});
3)将Ctl C(\ x03)发送到bash的stdin。 var listener = io.listen(server);
listener.set('log level',1);
listener.sockets.on('connection', function(client){
client.on('message', function(data){
if(data === "KILL") {
console.log('!!!!' + data);
sh.stdin.write('\x03');
client.broadcast.send(new Buffer("KILLING "));
//return;
};
console.log(data);
sh.stdin.write(data+"\n");
client.broadcast.send(new Buffer("> "+data));
});
});
我在这一点上陷入困境。好像是
答案 0 :(得分:1)
试试process.kill(sh.pid)
。当我的主进程关闭时,我用它来杀死集群中的worker。 sh.signalCode
应该等于SIGTERM
。当然,我不知道这是否适用于Windows。
答案 1 :(得分:0)
尝试stdout.push(null)
。
我在节点12上进行了尝试。这不会杀死您的子进程,而是会告诉您输出流不再有输入流。