2017-08-26 12 views
2

このノードjsコードを使用して、無限ループを含むApp.exeファイルを実行しています。私は入力を渡し、App.exeから出力を取得します。ノードjsを使用して.exeファイルを閉じる

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

問題が発生すると、子プロセスを強制終了すると子プロセスが強制終了されますが、App.exeは実行を継続します。私はApp.exeの実行を停止する方法があります

+1

の代わりに'cmd.exe'、' App.exe'を直接起動できませんか? – robertklep

答えて

2

で見つけることができません、あなたは直接後者を起動することができます

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

node.jsで生成されたプロセスを強制終了するには、SIGINTを使用する必要があります。

bat.kill('SIGINT'); 

すべてのPOSIXシグナルのリストと、彼らが代わりにApp.exeスポーンcmd.exe産卵のsignal7

+1

私はそれを試して、それは動作しませんでした。それは子プロセスを殺しましたが、app.exeは稼働し続けました。お返事をありがとうございます –

関連する問題