gpt4 book ai didi

c# - 如何判断是否触发了进程强制关闭(WaitForExit)?

转载 作者:行者123 更新时间:2023-11-30 17:17:24 29 4
gpt4 key购买 nike

我正在调用 ffmpeg。有时调用失败并且 ffmpeg 不会退出它只会进入递归循环。我调用了 WaitForExit 方法。

在代码中,我进一步询问了 standardOutput 和 standardError。我知道当 ffmpeg 不退出时,它会在控制台屏幕上产生大量垃圾。出于这个原因,我相信当我尝试获取 standardOutput 和 standardError 时,c# 代码就会崩溃。它仍在被写入。我如何判断 C# 是否已退出代码而不是进程自行退出?

我试图查看 process.HasExited 但它不起作用。即使我知道 c# 已退出进程,它仍然显示为 false。

            p.StartInfo.FileName = exePathArg;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.Arguments = argumentsArg;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;

p.Start();

p.WaitForExit(timeToWaitForProcessToExit);

StreamReader standardOutput = p.StandardOutput;
StreamReader standardError = p.StandardError;

retDirects.Add("StandardOutput", standardOutput.ReadToEnd());
retDirects.Add("StandardError", standardError.ReadToEnd());

最佳答案

除非进程提供某种输出或错误代码,否则您可能无法分辨。您可以使用以下方法查看 ExitCode:

p.ExitCode

错误代码由应用程序提供,因此您还必须了解它可能返回的值。

在某些情况下,如果进程被终止(例如,通过任务管理器,ExitCode 可能为 1,请参阅 this answer)。

更新

经过我们在评论中的交流,似乎还有一些其他问题需要解决:

如果您确信该进程实际上处于无响应状态,那么终止该进程是一个很好的最后手段。使用 Process 类“杀死”进程有两种方法:

如果您有一个带有图形界面的进程,您应该使用CloseMainWindow()CloseMainWindow() 与单击窗口上的退出按钮本质上是一样的,因此它更安全,因为它实际上要求程序自行关闭。请注意,该进程实际上可能不会响应 CloseMainWindow,因为它没有响应或因为它选择不响应,所以如果发生这种情况,您可能必须在之后使用 Kill() .

如果您的进程没有图形界面,Kill() 是唯一的方法。

但是,正如您在关于同时使用两者的评论中所询问的那样,您不应该这样做,除非您尝试使用 CloseMainWindow() 但它不起作用。

关于c# - 如何判断是否触发了进程强制关闭(WaitForExit)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6521810/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com