如何从子进程中的致命错误中拯救父进程
Posted
技术标签:
【中文标题】如何从子进程中的致命错误中拯救父进程【英文标题】:How to save parent process from fatal error in child process 【发布时间】:2021-11-25 01:34:07 【问题描述】:我的目标是为 NET Core 隔离一些代码执行。
-
我有一个控制台应用程序 #1(父级?),它为另一个控制台应用程序 #2(子级?)启动一个进程,然后运行动态编译的代码。
执行该代码可能会导致致命错误,例如 OutOfMemoryException。
发生这种情况时,应用程序 #1 和应用程序 #2 都会失败。
有没有办法从应用程序 #2 的失败中拯救应用程序 #1?
也许我误解了一些东西,但我认为这些应该是完全分开的。请帮忙。如果有的话,也会感谢 NET Framework 的解决方案。
ProcessStartInfo processStartInfo = new ProcessStartInfo(filePath, processArgs)
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
;
using (Process process = new Process()
StartInfo = processStartInfo,
EnableRaisingEvents = true
)
process.Start();
process.WaitForExit();
return process.StandardOutput.ReadToEnd();
;
【问题讨论】:
子进程失败时父进程到底发生了什么? FWIW,我也希望他们能够独立。 在线程 #1 中尝试捕获线程 #2 引发的异常怎么样? @500-InternalServerError,两个应用程序都崩溃了,我收到有关失败的窗口弹出窗口。 @T.Trassoudaine,您是否建议从另一个线程运行应用程序 #2? 它说什么? 【参考方案1】:所以,封装子应用程序的代码就足够了。即使在子应用程序中的OutOfMemoryException
、***Exception
、AccessViolationException
之后,父应用程序也会继续工作。
请记住,子应用程序可能需要一些时间才能完全释放崩溃后已使用的资源,因此其中一些资源可能仍被锁定在父应用程序中。
感谢各位大开眼界!
【讨论】:
以上是关于如何从子进程中的致命错误中拯救父进程的主要内容,如果未能解决你的问题,请参考以下文章