Node.js:如何将控件C发送到子进程

时间:2012-07-27 23:43:38

标签: bash node.js terminal control-characters

我正在使用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));
   });
});

我在这一点上陷入困​​境。好像是

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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