微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我怎样才能杀死在Windows上由exec运行的subprocess?

我必须在Nodejs上使用exec方法,因为我需要执行一些stdoutredirect,并同时运行多个命令。 所以我运行这样的subprocess:

let shell = null; const child_process = require('child_process') var command = 'activate python_environment & bokeh serve project_folder/ log/logger.log 2>&1'; shell = child_process.exec(command);

我需要ps-tree来杀死孩子,就像我在下面的代码中一样。 它在Ubuntu上运行良好。 但问题是我得到一个孤儿(僵尸)进程在Windows上,如果我不杀死subprocess。

const psTree = require('ps-tree') app.on('window-all-closed',function () { electron.app.quit() if(shell != null){ psTree(shell.pid,function (err,children) { children.map(function (p) { process.kill(p.PID); }); }); } });

ps-tree模块在Linux上使用命令ps ,在Windows上使用命令wmic 。 所以这是跨平台的。 但在我的情况下不起作用。 有一个更好的方法吗?

我正在探索ps-tree源代码,但是我什么也没find。

如何杀死由kill或kill -9脚本启动的进程产生的所有subprocess

Pkill -f不适用于进程查杀

使用其名称而不是PID来杀死一个java进程

从网站杀死一个进程

终止Qt过程:什么是Windows任务pipe理器在做什么,我不是?

我使用process.kill因为我也使用电子 。

我恐怕我应该尝试手动使用wmic获取所有进程列表。 这就是ps-tree想要做的。

注意:模块tree-kill在两个平台上都不起作用。

更新

那么,我发现了一个丑陋的解决方法。 我通过python代码os.getpid()将我的python进程PID保存到外部文件中。 有了这个,我可以像这样访问节点内有问题的PID:

const fs = require('fs'); fs.readFile(filePath,'utf-8',data) { process.kill(parseInt(data,10)); app.quit(); });

linux脚本杀死java进程

阻止Linux内核从真正的大堆中杀死Java进程

杀死任何端口上运行的tomcat服务,Windows

如何终止通常使用ProcessBuilder创build的进程

杀死一个Java僵尸进程

我回答了Windows,因为那是你遇到的问题。

看着你执行的命令,在我看来,你的两个命令的连接可能是罪魁祸首,所以我会尝试没有它。

如果你不能使用wmic是我所知道的最好的方法,那么你第一次必须手动检查yes。 一旦你有选择标准,你可以自动关闭一切。 当进程忙时,运行命令wmic process>processes.txt 。然后使用编辑器检查文件processes.txt,并在列commandline中查找所有要杀死的进程的公共字符串。 这将是你的选择标准。 由于创建过程的整个命令行都有路径和参数,所以这应该不成问题。

之后,您应该能够使用该命令关闭所有这些进程

wmic process Where "CommandLine Like '%my_select_criterium%'" Call Terminate

我在一个Ruby脚本中使用这种技术,这个脚本调用一个行为不良的Java应用程序,我无法控制它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐