如何生成一个启动电子应用程序的子进程,然后杀死它,同时保持父进程的生命?

时间:2019-05-08 21:10:44

标签: node.js electron

我有一个主要的程序可以启动(生成)一个电子应用程序(孩子),我试图杀死它,同时过一会儿让父母活着。我总是只杀死父母,并且在阅读了很多文章之后(也是关于stackoverflow),我唯一实现的就是杀死了他们两个。但是我需要让父母活着。我希望能够杀死不再响应或崩溃的子进程。

我试图分叉但也产生。 我在parent.js(下面的代码)中尝试了所有这些方法:

同时杀死:

process.kill(-script.pid);

仅杀死父母

kill(-script.pid, SIGKILL);

仅杀死父母(脚本是script = spawn(...)的子代):

script.stdin.pause();
script.kill();

parent.js:

let spawn = require('child_process').spawn;

console.log('main process started.');

let script = spawn('npm', ["start"], {detached: true});

setTimeout(function(){

  //This one kills both
  process.kill(-script.pid);

  }, 3000);

child.js:

const exec = require('child_process').exec;

exec('cd $HOME/Desktop/Myapp && npm start');

我希望父代始终活着,并在需要时杀死子代进程。 我知道这是非常基础的,但是即使经过大量研究和阅读,我仍然无法使它起作用。

也许和电子有关吗?

1 个答案:

答案 0 :(得分:0)

我自己找到了一个可能的解决方案。对于那些感兴趣的人。

我使用以下两个模块:

const findProcess = require('find-process');
const ps = require('ps-node');

我基本上使用findProcess按名称查找PID,然后使用ps杀死与此相关的所有进程。

findProcess('name', "Electron")
    .then(function (list) {

      for(var i=0; i<list.length; i++){

        console.log(list[i].pid);
        pidToKill = list[i].pid;
        pidToKill = pidToKill.toString();

        ps.kill( pidToKill, {
          signal: 'SIGKILL',
          timeout: 10,  // will set up a ten seconds timeout if the killing is not successful
        }, function(){});

      }
    }, function (err) {
      console.log(err.stack || err);
    });

这对您也有帮助,或者您有更好的解决方案。 如果有更好的解决方案,那么我很高兴听到它们。

谢谢