尝试使用shell tr​​ue和detached true nodejs来杀死spawn进程

时间:2017-05-16 17:20:40

标签: javascript node.js child-process spawn

我正在尝试编写一个简单的node.js应用程序,以便在专用shell中运行selenium,然后关闭shell和相应的子进程(在超时5秒之后,为了测试它)。 这是我到目前为止的代码:

const spawn = require('child_process').spawn;
const seleniumHub = spawn('java', ['-jar', 'selenium-server-standalone-2.48.2.jar'], { shell: true , detached: true });

seleniumHub.stdout.on('data', (data) => {
    console.log(`stdout: ${data}`);
});

seleniumHub.stderr.on('data', (data) => {
    console.log(`stderr: ${data}`);
});

seleniumHub.on('close', (code) => {
    console.log(`child process exited with code ${code}`);
});

setTimeout(function () {
    // process.kill(seleniumHub.pid); no errors but shell not closed
    // seleniumHub.kill('SIGINT'); completely ignored 
}, 5000);

Selenium正确运行,但我无法关闭打开的shell。 如果我试图通过它的pid关闭它,我会得到一个错误,即pid不存在。 如果我尝试在子进程上调用kill方法,它会完全忽略该命令。有什么建议吗?

谢谢

P.S。我在Windows机器上

1 个答案:

答案 0 :(得分:0)

好的,我自己找到了解决方案,如果它对某人有用,我会在这里发布。 作为解决方法,我再次使用spawn并调用Windows的taskkill,将f和t作为参数传递:

spawn("taskkill", ["/pid", seleniumHub.pid, '/f', '/t']);