我有一个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进程运行了这么长时间,我该怎么做才能确保它在子进程退出后立即退出?
答案 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'});