【问题标题】:Node JS - Cannot Kill Process Executed with Child Process ExecNode JS - 无法终止使用子进程 Exec 执行的进程
【发布时间】:2019-05-07 06:15:23
【问题描述】:

我们正在尝试终止使用节点child_process exec 命令启动的 chrome 浏览器的进程

var process = cp.exec(`"chrome.exe" --app="..."`, () => {}); // working great

但是当我们尝试时

process.kill(); //nothing happens...

这个过程是指 chrome 窗口还是其他东西?如果没有,我们如何获取新打开的 chrome 窗口进程、PID 等...?

任何帮助都会很棒...

注意 - 我们已尝试使用 chrome_launcher NPM,但它没有帮助,因为我们无法在没有全屏的情况下以 kiosk 模式打开 chrome,但这是另一个问题的问题...

【问题讨论】:

    标签: node.js child-process


    【解决方案1】:

    尝试 PID 破解

    我们可以使用{detached: true} 选项启动子进程,这样这些进程就不会附加到主进程,而是会转到一组新的进程。

    然后在主进程上使用process.kill(-pid) 方法,我们可以杀死具有相同pid 组的子进程的同一组中的所有进程。就我而言,我在这个组中只有一个进程。

    var spawn = require('child_process').spawn;
    
    var child = spawn('your-command', {detached: true});
    
    process.kill(-child.pid);
    

    【讨论】:

    • 您的进程有可能会死掉,而另一个具有相同 ID 的进程将被启动。
    • 为什么child.pid前面有个减号?
    • PID前面的-指示process.kill杀死PID所属的进程组,而不仅仅是PID所属的进程。
    【解决方案2】:

    我无法添加评论,所以我直接在答案中说:

    How to kill process with node js

    如果您检查上面的链接,您需要如下库

    https://www.npmjs.com/package/fkill

    取自stackoverflow问题的使用示例

    const fkill = require('fkill');
    
    fkill(1337).then(() => {
        console.log('Killed process');
    });
    
    fkill('Safari');
    
    fkill([1337, 'Safari']);
    
    

    我还发现了这个库来检查正在运行的进程

    https://github.com/neekey/ps

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多