2017-08-26 4 views
2

J'utilise ce code noeud js pour exécuter le fichier App.exe qui contient une boucle infinie. Je passe l'entrée et obtient la sortie d'App.exe.Fermer le fichier .exe à l'aide du noeud js

var bat = null; 
app.post("/api/run", function(req, res) { 
    if(req.body.success) { 
     if(bat) bat.kill(); 
    } 
    if(!bat) { 
     bat = spawn('cmd.exe', ['/c App.exe']); 
     bat.stderr.on('data', function (data) { 
      res.end(JSON.stringify({error: true, message: data.toString()})); 
     }); 

     bat.on('exit', function (code) { 
      bat = null; 
      console.log('Child exited with code ' + code); 
      res.end(JSON.stringify({error: false, message: "Application Closed!"})); 
     }); 
    } 
    bat.stdin.write(req.body.input+'\n'); 
    bat.stdout.once('data', function (data) { 
     console.log(data.toString()); 
     res.end(JSON.stringify({error: false, message: data.toString()})); 
    }); 
}); 

Problème: en cas de réussite du processus enfant, le processus enfant est arrêté mais App.exe continue à fonctionner. I là un moyen d'arrêter App.exe

+1

Au lieu de 'cmd.exe', ne pouvez-vous pas lancer directement App.exe? – robertklep

Répondre

2

lieu de frai cmd.exe qui fraye App.exe, vous pouvez reproduire ce dernier directement:

bat = spawn('App.exe'); 
0

Afin de tuer un processus engendré dans node.js vous devez utiliser le SIGINT.

bat.kill('SIGINT'); 

Une liste de tous les signaux POSIX et ce qu'ils font peut être trouvé à signal7

+1

Je l'ai essayé, ça n'a pas marché. Il a tué le processus enfant mais app.exe a continué à fonctionner. Merci pour votre réponse –