2

我正在使用 node.js + socket.io 编写一个类似 web 的 linux shell。像 ls、cd 这样的简单命令运行良好。但是当发出像 ping google.com 这样的命令时,stdout 会无休止地打印。我试图将 Ctrl +C 发送到标准输入,但没有运气。

1)产生“bash”进程

spawn = require('child_process').spawn;
var sh = spawn('bash');

2) 将 bash 标准输出发送到 socket.io

sh.stdout.on('data', function(data) {
   console.log('stdout' + data);
   listener.sockets.emit("stdout",new Buffer(data));
});

3) 将 Ctl C (\x03) 发送到 bash 的标准输入。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));
   });
});

我被困在这一点上。看起来像

4

2 回答 2

1

试试process.kill(sh.pid)。当我的主进程关闭时,我使用它来杀死集群中的工作人员。sh.signalCode应该等于SIGTERM。当然,我不知道这是否适用于 Windows。

于 2012-07-28T00:18:12.843 回答
0

试试stdout.push(null)。我在节点 12 上尝试过。这不会杀死您的子进程,而是会告诉您输出流没有更多的输入流。

于 2020-05-15T04:56:26.817 回答