2015-09-08 26 views
0

我開始一個子進程的jar文件由的NodeJS終止催生子進程

var exec = require('child_process').exec; 
// Start child process 
var child = exec("java -jar test.jar"); 

,我用我寫給孩子的PID kill函數終止子進程

killProcess(child.pid); 

該函數始終在pid正確時工作,但是,因爲nodejs在下圖所示的cmd.exe中創建了子進程, 並且child.pid是cmd.exe的pid,而不是真正的java。 exe

enter image description here

我的問題是,偶爾的java.exe會得到太大,跳出CMD.EXE,成爲一個獨立的過程,當我停止服務器我甚至不能終止它。而且因爲我沒有java.exe的pid,所以我無法用我的函數終止它。

還有什麼其他方法可以在不手動執行的情況下終止進程,或者獲取java.exe的pid而不是cmd.exe的pid?

回答

0

事實證明,問題在於如何創建子進程。

使用exec創建子進程具有大小限制,因此,將其從exec更改爲spawn可解決問題。

// Spawn the external jar file as a child process and listen print the output 
var spawn = require('child_process').spawn; 
// Start child process 
var child = spawn('java', ['-jar', file_name]);