1

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

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

4

10 回答 10

4

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

while(1)
{
  //...
}

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

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

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

于 2012-04-26T11:05:30.383 回答
4

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

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

于 2012-04-26T11:06:32.693 回答
2

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

但是,如果您的程序可能导致堆栈溢出或其他一些崩溃

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

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

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

int main(){
    while(true){
        int *i = new int;
    }
}
于 2012-04-26T11:04:38.307 回答
2

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

在 x86 Windows 系统上,进程限制通常为 2GB

于 2012-04-26T11:05:56.127 回答
1

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

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

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

于 2012-04-26T11:08:49.647 回答
1

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

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

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

于 2012-04-26T11:09:51.993 回答
1

我会简单地指向维基百科

2005 年,Novell 报告了一台具有 6 年正常运行时间的服务器。

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

于 2012-04-26T11:10:38.187 回答
1

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

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

于 2012-04-26T11:04:18.563 回答
1

这将是一个永恒的计划。重新启动或系统挂起将终止该进程

于 2012-04-26T11:05:33.193 回答
1

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

于 2012-04-26T11:05:56.480 回答