windos杀死进程
Posted tianzengguan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windos杀死进程相关的知识,希望对你有一定的参考价值。
netstat -ano | findstr “端口号”
taskkill /pid 端口号id /f
当节点进程被杀死时杀死所有child_process
【中文标题】当节点进程被杀死时杀死所有child_process【英文标题】:kill all child_process when node process is killed 【发布时间】:2013-08-19 00:10:34 【问题描述】:当父进程被杀死时,我如何确保所有子进程都被杀死。 我有类似下面的东西。
即使节点进程被杀死,我也看到 FFMPEG 继续运行并生成了 out.avi。节点进程退出后如何阻止 FFMPEG 运行。
var args = "ffmpeg -i in.avi out.avi"
child_process.exec(args , function(err, stdout,stderr));
child_process.exec(args , function(err, stdout,stderr));
【问题讨论】:
【参考方案1】:你可以监听退出进程事件,所以当主进程即将退出时你有时间在ffmpeg子进程上调用kill方法
var args = "ffmpeg -i in.avi out.avi"
var ffmpegChildProccess = child_process.exec(args , function(err, stdout,stderr));
process.on('exit', function()
console.log('process is about to exit, kill ffmpeg');
ffmpegChildProccess.kill();
);
编辑:正如 cmets 所提到的并且 fakewaffle 解决方案是正确的,kill 不是在 child_process 中调用,而是在执行时获得的对子进程的引用中调用执行。 我还删除了“what a about ...”,因为这是不必要的,而且我无意中意识到大声朗读时听起来很刺耳。
【讨论】:
child_process
模块没有kill
。
那是子进程对象,不是child_process
模块。
您错过了必须存储对子进程的引用,然后在上面存储kill
。【参考方案2】:
你需要监听进程退出事件然后杀死子进程。这应该适合你:
var args = "ffmpeg -i in.avi out.avi"
var a = child_process.exec(args , function(err, stdout,stderr));
var b = child_process.exec(args , function(err, stdout,stderr));
process.on('exit', function ()
a.kill();
b.kill();
);
【讨论】:
如果进程a
在主进程触发exit
事件并且a.kill()
被调用之前完成会发生什么。这不会有可能杀死另一个被重新分配给a
曾经的PID的进程吗?你如何防止这种情况发生?
也许是个愚蠢的问题,但我是否总是需要在 child_process 上调用 kill ?我的代码中有一个与内存相关的错误,并认为可能是像这样的疯狂东西正在生成它......
@Sukima 我认为解决方案是添加一个在子退出时触发的事件处理程序,并做一些事情(例如将流程变量设置为 null 或其他事情),以便父进程知道不杀了它。以上是关于windos杀死进程的主要内容,如果未能解决你的问题,请参考以下文章