首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node.js:如何向子进程发送控件C

Node.js:如何向子进程发送控件C
EN

Stack Overflow用户
提问于 2012-07-28 07:43:38
回答 2查看 5K关注 0票数 2

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

1)产生'bash‘进程

代码语言:javascript
运行
复制
spawn = require('child_process').spawn;
var sh = spawn('bash');

2)发送bash stdout到socket.io

代码语言:javascript
运行
复制
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(服务端);

代码语言:javascript
运行
复制
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));
   });
});

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

EN

回答 2

Stack Overflow用户

发布于 2012-07-28 08:18:13

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

票数 1
EN

Stack Overflow用户

发布于 2020-05-15 12:56:27

试试stdout.push(null)。我在节点12上试过了,它不会杀死你的子进程,而是会告诉你输出流已经没有输入流了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11696967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档