2015-09-08 64 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]);