我有一个主要的程序可以启动(生成)一个电子应用程序(孩子),我试图杀死它,同时过一会儿让父母活着。我总是只杀死父母,并且在阅读了很多文章之后(也是关于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');
我希望父代始终活着,并在需要时杀死子代进程。 我知道这是非常基础的,但是即使经过大量研究和阅读,我仍然无法使它起作用。
也许和电子有关吗?
答案 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);
});
这对您也有帮助,或者您有更好的解决方案。 如果有更好的解决方案,那么我很高兴听到它们。
谢谢