none
如何检测并结束父进程所运行的子进程? RRS feed

  • 问题

  • 如题?如何(最好通过C#)检测并结束父进程所运行的所有子进程?

    如a.exe运行了b.exe和c.exe,b.exe又运行了d.exe,如何检测,并结束所有的进程?(记得有一个很强大的任务管理器有这个功能)

    2011年8月22日 13:48

答案

  • 您是说Process Explorer吗?

    下载地址: http://technet.microsoft.com/en-us/sysinternals/bb896653

     

    确定所有线程是否都完成了工作的方法有很多,如可以采用类似于对象计数器的方法,所谓对象计数器,就是一个对象被引用一次,这个计数器就加1,销毁引用就减1,如果引用数为0,则垃圾搜集器就会对这些引用数为0的对象进行回收。 方法一:线程计数器 线程也可以采用计数器的方法,即为所有需要监视的线程设一个线程计数器,每开始一个线程,在线程的执行方法中为这个计数器加1,如果某个线程结束(在线程执行方法的最后为这个计数器减1),为这个计数器减1。然后再开始一个线程,按着一定的时间间隔来监视这个计数器,如是棕个计数器为0,说明所有的线程都结束了。当然,也可以不用这个监视线程,而在每一个工作线程的最后(在为计数器减1的代码的后面)来监视这个计数器,也就是说,每一个工作线程在退出之前,还要负责检测这个计数器。使用这种方法不要忘了同步这个计数器变量啊,否则会产生意想不到的后果。 方法二:使用Thread.join方法 join方法只有在线程结束时才继续执行下面的语句。可以对每一个线程调用它的join方法,但要注意,这个调用要在另一个线程里,而不要在主线程,否则程序会被阻塞的。 个人感觉这种方法比较好。

    链接:https://skydrive.live.com/?sc=documents&cid=03e6a6a86c941f49#!/view.aspx?cid=03E6A6A86C941F49&resid=3E6A6A86C941F49%21126


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    • 已标记为答案 Flysha 2011年8月25日 14:44
    2011年8月24日 4:47
    版主

全部回复

  • 您是说Process Explorer吗?

    下载地址: http://technet.microsoft.com/en-us/sysinternals/bb896653

     

    确定所有线程是否都完成了工作的方法有很多,如可以采用类似于对象计数器的方法,所谓对象计数器,就是一个对象被引用一次,这个计数器就加1,销毁引用就减1,如果引用数为0,则垃圾搜集器就会对这些引用数为0的对象进行回收。 方法一:线程计数器 线程也可以采用计数器的方法,即为所有需要监视的线程设一个线程计数器,每开始一个线程,在线程的执行方法中为这个计数器加1,如果某个线程结束(在线程执行方法的最后为这个计数器减1),为这个计数器减1。然后再开始一个线程,按着一定的时间间隔来监视这个计数器,如是棕个计数器为0,说明所有的线程都结束了。当然,也可以不用这个监视线程,而在每一个工作线程的最后(在为计数器减1的代码的后面)来监视这个计数器,也就是说,每一个工作线程在退出之前,还要负责检测这个计数器。使用这种方法不要忘了同步这个计数器变量啊,否则会产生意想不到的后果。 方法二:使用Thread.join方法 join方法只有在线程结束时才继续执行下面的语句。可以对每一个线程调用它的join方法,但要注意,这个调用要在另一个线程里,而不要在主线程,否则程序会被阻塞的。 个人感觉这种方法比较好。

    链接:https://skydrive.live.com/?sc=documents&cid=03e6a6a86c941f49#!/view.aspx?cid=03E6A6A86C941F49&resid=3E6A6A86C941F49%21126


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    • 已标记为答案 Flysha 2011年8月25日 14:44
    2011年8月24日 4:47
    版主
  • 谢谢你!
    2011年8月25日 14:45
  • 不客气。

    欢迎下次再来讨论C#方面的技术问题。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年8月26日 2:01
    版主