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 à
Doit être 'process.kill (sh.pid, 'SIGINT');' – ebohlman
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