一定时间后杀死进程+ C#

Posted

技术标签:

【中文标题】一定时间后杀死进程+ C#【英文标题】:Kill Process after certain time + C# 【发布时间】:2009-06-22 15:22:13 【问题描述】:

我如何在 2 或 3 分钟后杀死一个进程看看下面的代码:

 class Program

    static void Main(string[] args)
    

        try
        
            //declare new process and name it p1
            Process p1 = Process.Start("iexplore", "http://www.google.com");
            //get starting time of process
            DateTime startingTime = p1.StartTime;
            Console.WriteLine(startingTime);
            //add a minute to startingTime
            DateTime endTime = startingTime.AddMinutes(1); 
            //I don't know how to kill process after certain time
            //code below don't work, How Do I kill this process after a minute or 2
            p1.Kill(startingTime.AddMinutes(2));                
            Console.ReadLine();


        
        catch (Exception ex)
        

            Console.WriteLine("Problem with Process:0", ex.Message);
        



    

所以我希望 IE 窗口在 2 分钟后关闭

【问题讨论】:

p1.WaitForExit(60000); // 日期时间 endTime2; p1.CloseMainWindow(); //endTime2 = p1.ExitTime; p1.Close(); 【参考方案1】:

使用Process.WaitForExit,超时两分钟,如果WaitForExit返回false,则调用Process.Kill

(您也可以考虑调用CloseMainWindow 而不是Kill,具体取决于您的情况 - 或者至少先尝试一下,让进程有更多机会进行有序关闭。)

【讨论】:

感谢约翰使用 closemain windows 方法的帮助,效果很好【参考方案2】:

使用 System.Threading.Timer 并提供 TimerCallback(其中包含您的 process.Kill)以在 2 分钟后回调。 见the example here

//p1.Kill(startingTime.AddMinutes(2));
using (var timer = new Timer(delegate  p1.Kill(); , null, 2000, Timeout.Infinite))
 
  Console.ReadLine();  // do whatever

编辑:Jon 的解决方案更简单.. 类型更少.. 没有 Disposal reqd。

【讨论】:

【参考方案3】:

您应该尝试使用 Windows 服务而不是控制台应用程序。 Windows 服务具有迭代生命周期,因此可以使用 Windows 服务中的计时器控件轻松实现这一点。让计时器以一定的时间间隔滴答作响,并在特定的时间间隔内执行所需的操作。

当然,您也可以在控制台应用程序中使用计时器控制。

【讨论】:

以上是关于一定时间后杀死进程+ C#的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中以编程方式杀死进程树

轻轻杀死一个进程

如何区分具有相同名称的多个进程并杀死所有在 C# 中以我的 USERNAME 运行的进程?

Python子进程,定时延迟后杀死进程

如何使用 C++ 以编程方式杀死进程?

进程被杀死后恢复状态