程序“崩溃”和停止响应的程序之间有区别吗?

yur*_*uki 2 terminology

我发现自己对这两个术语感到困惑。我原本以为当程序“崩溃”时,它会自动退出并终止进程。但是当程序停止响应时,它会给出“程序没有响应”的错误,然后提示您下一步要做什么。

是否有描述“程序停止响应”的术语?或者这个词只是“崩溃”这个词?两者有区别吗,崩溃,程序停止响应?

Law*_*ceC 5

有。

可以使用称为异常的技术编写程序 以下是它们如何工作的简单描述:

  • 这个想法是你可以告诉程序的一部分,当它遇到错误或无法处理的事情时,抛出异常。
  • 程序的另一部分先前已设置为捕获异常——这是异常处理程序。
  • 如果错误是异常处理程序也无法处理的,它可以执行以下两种操作之一:
    • 将它扔给另一个可能能够处理它的异常处理程序。
    • 只需将它“扔到那里”到任何地方 - 如果没有愿意/可用的异常处理程序接受它,操作系统本身就会捕获它,并且您会看到崩溃对话框。

因此,当程序崩溃时,它实际上已经放弃并终止了执行。

当程序停止响应时,情况就不同了。Windows 程序使用消息循环保持与操作系统的通信 如果程序卡住,无论是等待 I/O 还是无限循环,它都会停止从循环中获取消息,然后 Windows 会告诉您程序没有响应。可能导致程序意外等待 I/O 的一件事是当您的 RAM 不足并且操作系统必须使用页面文件来处理内存请求时。另一个可能是如果您的磁盘突然出现故障并且程序员从未考虑过写入文件的可能性可能会被类似的东西中断 - 或者程序员做了类似“如果此操作失败,永远重试”之类的事情。

所以在这种情况下,程序仍在运行,只是不再与 Windows 对话。