强制外部进程在一段时间后被杀死

时间:2009-09-16 17:47:25

标签: c# .net external-process

我有一个从C#类库运行的命令行可执行文件。在一些非常罕见的情况下,由于传递给它的命令行数据,可执行文件将挂起。不幸的是,这导致调用c#DLL的应用程序挂起,同时它无限期地等待进程退出。

如果命令行exe在1秒内没有完成执行,它永远不会退出。我想做的是在进程启动后立即生成一个计时器,并在几秒钟内没有退出时强制关闭进程。

这里最好的方法是什么?解决方案需要对性能产生最小的影响,因为此命令行进程是高度重复性任务的瓶颈。

编辑:为什么我应该使用System.Timer而不是Threading.Timer,反之亦然?

            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.CreateNoWindow = false;
            startInfo.UseShellExecute = true;
            startInfo.WorkingDirectory = workingDirectory;
            startInfo.FileName = commandLineExe;
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            startInfo.Arguments = strArguments;



            // Call WaitForExit and then the using statement will close.
            using (Process exeProcess = Process.Start(startInfo))
            {

                exeProcess.WaitForExit();
            }

请不要提出我应该尝试的建议,找出命令行应用程序挂起的原因,或者我应该将命令行功能重构为源代码。我们正在积极解决这个问题,但应用程序的稳定性需要先行。

1 个答案:

答案 0 :(得分:5)

只需添加:

// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(startInfo)) {
    if(!exeProcess.WaitForExit(1000))
          exeProcess.Kill();
}