Nodejs终止产生的子进程

Posted

技术标签:

【中文标题】Nodejs终止产生的子进程【英文标题】:Nodejs Terminate Spawned Child Process 【发布时间】:2015-09-08 18:09:31 【问题描述】:

我为一个 jar 文件启动了一个子进程

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

我的问题是,有时候java.exe会变大,跳出cmd.exe变成一个独立的进程,即使我停止服务器也无法终止。而且因为我没有 java.exe 的 pid,所以我无法用我的函数终止它。

我可以通过哪些其他方式终止进程而无需手动执行,或者获取 java.exe 而不是 cmd.exe 的 pid?

【问题讨论】:

【参考方案1】:

事实证明,问题在于我创建子进程的方式。

使用 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]);

【讨论】:

以上是关于Nodejs终止产生的子进程的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程管理

创建一个不是创建进程子进程的新进程

golang 热重启

Linux学习-进程管理

Nodejs 信号

Shell脚本入门 07:进程与信号