【问题标题】:how long an executable will run in infinite case(any timing limit) [closed]可执行文件将在无限情况下运行多长时间(任何时间限制)[关闭]
【发布时间】:2012-04-26 11:02:16
【问题描述】:

一个小疑问 我有一个无限循环运行的应用程序(exe),它执行多长时间。我的意思是,如果我的系统处于开启状态,它会执行多年。或者应用程序运行是否有任何时间限制。

(如果这不是这个问题的正确位置,请指出正确的参考)

【问题讨论】:

  • 只要电费不来。那你就破产了。 :D
  • 尽管这会得到很多答案,但这是一个之前肯定有人问过的愚蠢问题
  • 没有限制,例如银行系统运行多年没有任何问题。另一个常见的例子是 linux 上的 init 程序,只要您的计算机处于开启状态,它就会运行。我的有 60 天,这不是记录
  • 我看不出这个问题有什么建设性。
  • in·fi·nite/ˈinfənit/ 形容词:在空间、范围或大小上无限或无限;无法测量或计算:“无限数量的星星”。

标签: c++ c executable exe


【解决方案1】:

如果您的应用程序在无限循环中运行,即

while(1)
{
  //...
}

如果遇到错误并且您的代码没有正确处理,它将停止,否则它应该无限期地运行。

如果有操作系统相关的信号终止进程,它将终止。这可能来自用户手动尝试终止进程,也可能是由于系统上的一般内存短缺而发生的。这些类型的操作系统信号通常是您无法控制的。但是,您可以实现一种方法来检测您的进程是否已终止(可能通过使用子进程),如果进程意外终止,该方法将重新启动/恢复该进程。

如果您将进程添加到操作系统的启动脚本中,那么即使发生电源故障或可能导致重新启动的其他类型的事件,您也可以得到保障。

【讨论】:

    【解决方案2】:

    如果我的系统开启,它会执行多年吗

    这取决于操作系统。可以配置 Unix 系统(使用ulimit -t),以便进程在消耗一定量的 CPU 时间后自动终止。

    【讨论】:

      【解决方案3】:

      理论上它可以永远执行。但是大多数复杂的程序并不是完全节省内存的。它可能会及时消耗越来越多的内存,并可能达到进程内存限制。

      在 x86 Windows 系统上,process limit 通常为 2GB

      【讨论】:

      • 但大多数复杂程序并非完全节省内存。 => 这通常称为错误。
      • @MatthieuM。除非它是未记录的功能。 :D
      • 在 Windows 上,限制实际上是 16TB 或 256TB,具体取决于它是 32 位还是 64 位系统(显然还有一个由硬件决定的物理限制,很多时候远小于Windows 强加的限制)。
      • @R.MartinhoFernandes:他说的是每个进程的限制,对于 32 位系统来说绝对不是 16TB。
      • @R.MartinhoFernandes:如果您的语言的内存分配器不使用部分映射的文件,则它们完全是题外话。
      【解决方案4】:

      一个永远不会到达终点的程序将一直运行,只要计算机能够运行它。

      不过,如果您的程序可能导致堆栈溢出或其他崩溃

      例如(将永远运行的程序)

      int main(){
          while(true){
              int i = 0;
          }
      }
      

      例如(对于崩溃的程序,相当肯定这实际上会崩溃)

      int main(){
          while(true){
              int *i = new int;
          }
      }
      

      【讨论】:

      • 这将如何产生堆栈溢出或崩溃?
      • 它不会 :P 我只是不想说出我给出的例子到底是什么,但我给出了一个应该崩溃的例子
      • @thecoshman 垃圾收集实现不会在第二个崩溃。
      • 好点,但不是可以依赖的东西
      【解决方案5】:

      它将一直执行,直到您重新启动或以其他方式终止该进程。

      如果它真的是一个无限循环,你会很恼火地很快杀死它,因为其他应用程序会在盒子上遭受 CPU 饥饿的困扰。如果你是多核的,这不会破坏交易,但看到其他所有速度都变慢仍然会令人恼火。

      【讨论】:

      • 除非你在循环中睡眠。
      • 对,或其他一些低 CPU 状态,例如“等到收到信号后再工作”
      【解决方案6】:

      这将是一个永恒的计划。重启或系统挂起都会杀死进程

      【讨论】:

        【解决方案7】:

        只要给定所有必需的资源,无限循环就会运行。

        【讨论】:

          【解决方案8】:

          一个来自维基百科的例子:

          2005 年,Novell 报告了一台服务器的正常运行时间为 6 年。[2][3]。 虽然这听起来可能不寻常,但实际上这很常见 服务器在工业环境下维护并且主机至关重要 应用程序,想想银行系统。

          而且总是至少有一个进程会一直运行。

          【讨论】:

            【解决方案9】:

            我会简单地指向Wikipedia

            2005 年,Novell 报告了一台运行时间为 6 年的服务器。

            在为服务器编写软件的业务中,进程仅在维护操作时停止。它们预计会永远运行。但在实践中,我们分配负载以使维护频率远高于每 6 年一次,但几个月并不罕见。

            【讨论】:

              【解决方案10】:

              简单的答案是,它可能不会像您预期的那样永远运行。

              您的操作系统(尤其是旧版本的 Windows)可能需要重新启动 - 示例:Windows 95 和 Windows 98(现已修补)中存在一个著名的错误,导致这些系统在正常运行 49.7 天后停止运行 (Read Here) . 我希望最新版本的 Windows 不会出现这种问题。

              这还取决于您的操作系统的调度程序。大多数时候可能会有高优先级的任务运行。我听说过一些较旧的 Unix 系统,其中低优先级的任务需要多年才能获得运行的机会! .无论如何,我们不会在桌面操作系统中遇到这种极端情况。

              【讨论】:

                猜你喜欢
                • 2018-04-27
                • 1970-01-01
                • 1970-01-01
                • 2011-11-29
                • 1970-01-01
                • 1970-01-01
                • 2017-05-18
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多