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杀死进程的主要内容,如果未能解决你的问题,请参考以下文章

制作windos后台服务进程类型nohup命令

linux杀死进程怎么一下子全部杀死

当父进程被杀死时,使用 fork() 创建的子进程是不是会自动被杀死?

linux下 用啥命令查看进程?如何杀死进程?

Android可以彻底杀死一个进程吗

《Linux学习并不难》进程管理:杀死进程之kill命令