2012-07-27 5 views
0

J'écris un shell Linux de type web en utilisant node.js + socket.io. Une commande simple comme, ls, cd fonctionne bien. Mais lors de l'émission d'une commande telle que ping google.com, la sortie standard est imprimée à l'infini. J'ai essayé d'envoyer Ctrl + C à stdin, mais pas de chance.Node.js: Comment envoyer le contrôle C au processus fils

1) rogue processus 'bash'

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

2) envoyer stdout bash à Socket.IO

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

3) Envoi Ctl C (\ x03) à bash de STDIN. var listener = io.listen (serveur);

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)); 
    }); 
}); 

Je suis bloqué à ce stade. Ressemble à

Répondre

1

Essayez process.kill(sh.pid). J'utilise ceci pour tuer des travailleurs dans un cluster quand mon processus maître s'arrête. sh.signalCode doit être égal à SIGTERM. Bien sûr, je n'ai aucune idée si cela fonctionne sur Windows.

+0

Doit être 'process.kill (sh.pid, 'SIGINT');' – ebohlman

+0

La valeur par défaut est SIGTERM sous OS X. J'imagine que l'appel de fin ou d'interruption dépend du système d'exploitation. – cjohn

Questions connexes