child_process.execFile退出缓慢

时间:2018-04-04 16:42:32

标签: node.js windows child-process

我有一个Node脚本以这种方式调用外部程序(PluginManager.exe):

const util = require('util');
const execFile = util.promisify(require('child_process').execFile);

const process = execFile('PluginManager.exe', ['/install']);
process
  .then(({stdout, stderr}) => console.log('done', stdout, stderr))
  .catch(e => console.log(e));

PluginManager.exe需要8秒才能执行。我的问题是,在子进程退出后,Node脚本会再运行10秒钟。我知道PluginManager.exe何时完成,因为我可以看到它从Windows任务管理器进程列表中消失。

什么使Node进程运行了这么长时间,我该怎么做才能确保它在子进程退出后立即退出?

2 个答案:

答案 0 :(得分:1)

也许它等待输入并在10秒后超时?

尝试使用https://nodejs.org/api/child_process.html#child_process_subprocess_stdin

中提到的.end()关闭stdin

(在此用法中,您需要execFile的原始返回值,因此不要按照https://stackoverflow.com/a/30883005/1105015进行宣传

e.g。

const util = require('util');
const execFile = require('child_process').execFile;

const process = execFile(
  'PluginManager.exe', ['/install'], (e, stdout, stderr) => {
    if (e) {
      console.log(e);
    } else {
      console.log('done', stdout, stderr));
    }});
process.stdin.end();

答案 1 :(得分:0)

您是否尝试过将killSignal选项设置为更具侵略性的内容?

const process = execFile('PluginManager.exe', ['/install'], {killSignal: 'SIGKILL'});