咨询区

  • robr

我用代码动态的打开了一个 IE 进程,参考如下代码:

static void Main(string[] args){ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe");startInfo.WindowStyle = ProcessWindowStyle.Hidden;startInfo.Arguments = "http://www.google.com";Process ieProcess = Process.Start(startInfo);}

代码运行后,在 任务管理器 上会有两个进程,现在我尝试通过下面的方法去 kill 它。

ieProcess.Kill();

我发现 kill 不干净,应该是这个进程的附属子进程无法被销毁,请问这种情况我该如何去处理呢?

回答区

  • Cyprien Autexier

如果 kill 主进程之后,让附属的子进程也可以自动销毁的话,大概有2种解决办法。

  1. 使用 ManagementObjectSearcher

通过指定的 pid 获取所有进程(包括子进程),再进行统一 kill,参考如下代码:

/// <summary>
/// Kill a process, and all of its children, grandchildren, etc.
/// </summary>
/// <param name="pid">Process ID.</param>
private static void KillProcessAndChildren(int pid)
{// Cannot close 'system idle process'.if (pid == 0){return;}ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + pid);ManagementObjectCollection moc = searcher.Get();foreach (ManagementObject mo in moc){KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));}try{Process proc = Process.GetProcessById(pid);proc.Kill();}catch (ArgumentException){// Process already exited.}
}
  1. process.kill(true) 方式

如果你是 .NET Core 3.0 以上的项目,在框架中已经内置了 boolean 类型的 Kill 方法重载,签名如下:

//// Parameters://   entireProcessTree://     true to kill the associated process and its descendants; false to kill only the//     associated process.//public void Kill(bool entireProcessTree);

然后就可以再改造一下。

static void Main(string[] args){ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe");startInfo.WindowStyle = ProcessWindowStyle.Hidden;startInfo.Arguments = "http://www.google.com";Process ieProcess = Process.Start(startInfo);ieProcess.Kill(true);}

点评区

Kill方法重载的这个很不错,框架越来越强大,

如何通过 C# kill 指定进程?相关推荐

  1. Linux-京东字节百度提前批,一面二面都被问到了awk——实例篇(3)查进程,kill指定进程

    去年提前批我投了京东.字节和百度,一面,二面都被问到了awk,如果你会,并且还很熟悉,那肯定算是一个加分项了!好感度up up up! 基本原理本篇不再赘述.请阅读: 总结了200篇面经中的awk面试 ...

  2. 杀掉(kill)指定进程及其子进程

    在使用celery这个异步任务框架时,会默认启动多个进程来做Worker的任务 可以看到父进程27957下有很多子进程 我们想把他及他下面的子进程全部kill掉,如果挨个去kill那也太- 使用kil ...

  3. Linux kill 杀死指定进程

    Linux kill 杀死指定进程 一  杀死指定进程 现知道有一个php线程正在运行,需要杀死 root 26278 1 0 2015 ? 00:00:31 /usr/local/php/bin/p ...

  4. linux中杀死指定进程,Linux中通过 kill命令 杀死指定进程

    一  杀死指定进程 现知道有一个curl线程正在运行,需要杀死 anggang@barry$ curl -y 30 -Y 1 -m 300 -x 8.8.8.8:808 -o html_baidu h ...

  5. linux杀死指定名称的进程,Linux kill 杀死指定进程

    一  杀死指定进程 现知道有一个php线程正在运行,需要杀死 root 26278 1 0 2015 ? 00:00:31 /usr/local/php/bin/php /var/www/html/r ...

  6. python获取进程编号(目的、获取当前进程编号、根据编号杀死指定进程号、获取当前父进程编号)

    1. 获取进程编号的目的         获取进程编号的目的是验证主进程和子进程的关系,可以得知子进程是由那个主进程创建出来的. 获取进程编号的两种操作 获取当前进程编号 获取当前父进程编号 2. 获 ...

  7. linux kill杀死进程

    背景:这个命令总是记不住,在此稍作记录,方便查看! 1 杀死进程 1.1 查看进程 此时如果我想杀了火狐的进程就在终端输入: $ kill -s 9 1827 其中-s 9 制定了传递给进程的信号是9 ...

  8. Linux下批量kill掉进程

    ps -ef|grep java|grep -v grep|cut -c 9-15|xargs kill -9 管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符右边命 ...

  9. [Bash]kill指定的进程名

    通过bash来kill指定的进程名,bash文件名为:/home/zcm/bin/d.sh,内容如下: #!/bin/sh if [ "$1" = "" ]; ...

最新文章

  1. JavaScript初学者编程题(3)
  2. php swoole编译,编译安装swoole1.7.9,PHP版本5.6.5
  3. 使用jquery的getJSON从服务器端获得数据
  4. 用 Go 语言实现 Raft 选主
  5. 启动/删除Docker容器时出现问题 - 如何修复
  6. 从零开始学C++之继承(一):公有/私有/保护继承、overload/overwrite/override之间的区别...
  7. java 日期 年数_java 日期加减天数、月数、年数的计算方式
  8. vc++中进程通信之剪贴板常用函数
  9. 论文笔记_S2D.04-2011-CVPR-对象立体化-联合立体匹配与对象分割
  10. Python pip 命令详解
  11. 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a 因为配置标识不正确
  12. win10读取linux硬盘,win10怎么读取lxext4格式硬盘
  13. NetSetMan NetSetMan IP快速切换
  14. 数据分析师是什么,深度解析数据分析师
  15. 2021美亚杯个人赛记录
  16. UE4 下雪特效(特效)
  17. java 60进制运算_Java【第二篇】基本语法之--进制、运算符
  18. Ionic实现混合开发--探索之旅
  19. nginx报错解决connect() to unix:/tmp/php-cgi-73.sock failed (111: Connection refused
  20. Windows下启动Redis失败,报错creating server tcp listening socket 127.0.0.1:6379: bind No error

热门文章

  1. Java编码规范,在您进行编码之前应该阅读的规范
  2. 环境在c盘_如何给女朋友解释为什么 Windows 上面的软件都把自己安装在 C 盘
  3. python可迭代对象 迭代器生成器_Python可迭代对象、迭代器和生成器
  4. 【Android Studio安装部署系列】十三、Android studio添加和删除Module 2
  5. 算法61---两个字符串的最小ASCII删除和【动态规划】
  6. VMWare 安装 Linux
  7. su: user tomcat does not exist
  8. Snmp linux
  9. mybatis模糊查询不同写法
  10. Linux Swap分区设定