一个小小的疑问,我有一个无限循环运行的应用程序(exe),它执行多长时间。我的意思是,如果我的系统处于开启状态,它会执行多年。或者应用程序运行是否有任何时间限制。
(如果这不是这个问题的正确位置,请指出正确的参考)
一个小小的疑问,我有一个无限循环运行的应用程序(exe),它执行多长时间。我的意思是,如果我的系统处于开启状态,它会执行多年。或者应用程序运行是否有任何时间限制。
(如果这不是这个问题的正确位置,请指出正确的参考)
如果您的应用程序在无限循环中运行,即
while(1)
{
//...
}
如果遇到错误并且您的代码没有正确处理它,它将停止,否则它应该无限期地运行。
如果有与操作系统相关的信号来终止进程,它将终止。这可能来自用户手动尝试终止进程,也可能是由于系统内存不足而发生的。这些类型的操作系统信号通常是您无法控制的。但是,您可以实现一种方法来检测您的进程是否已终止(可能通过使用子进程),如果进程意外终止,它将重新启动/恢复进程。
如果您将进程添加到操作系统的启动脚本中,那么即使发生电源故障或可能导致重新启动的其他类型的事件,您也会受到保护。
如果我的系统开启,它会执行多年吗
这取决于操作系统。可以配置 Unix 系统(使用ulimit -t
),以便进程在消耗一定量的 CPU 时间后自动终止。
只要计算机能够运行它,一个永远不会到达终点的程序将一直运行。
但是,如果您的程序可能导致堆栈溢出或其他一些崩溃
例如(将永远运行的程序)
int main(){
while(true){
int i = 0;
}
}
例如(崩溃的程序,相当肯定这实际上会崩溃)
int main(){
while(true){
int *i = new int;
}
}
它理论上可以永远执行。但是大多数复杂的程序并不是完全节省内存的。它可能会及时消耗越来越多的内存,并可能达到进程内存限制。
在 x86 Windows 系统上,进程限制通常为 2GB
简单的答案是,它可能不会像您预期的那样永远运行。
您的操作系统(尤其是旧版本的 Windows)可能需要重新启动 - 示例:Windows 95 和 Windows 98(现已修补)中存在一个著名的错误,导致这些系统在正常运行 49.7 天后停止运行(阅读此处)。我希望最新版本的 Windows 没有这种问题。
它还取决于您的操作系统的调度程序。大多数时候可能会有高优先级的任务运行。我听说过一些较旧的 Unix 系统,其中低优先级的任务需要多年才能获得运行的机会!. 无论如何,我们不会在桌面操作系统中遇到这种极端情况。
来自维基百科的一个例子:
2005 年,Novell 报告了一台服务器的正常运行时间为 6 年。[2][3]。虽然这听起来可能不寻常,但当服务器在工业环境下维护并托管关键应用程序时,这实际上很常见,想想银行系统。
并且总是至少有一个进程会一直运行。
我会简单地指向维基百科:
2005 年,Novell 报告了一台具有 6 年正常运行时间的服务器。
在为服务器编写软件的业务中,进程仅在维护操作时停止。他们预计将永远运行。但在实践中,我们分配负载,使维护频率远高于每 6 年一次,但几个月并不罕见。
它将一直执行,直到您重新启动或以其他方式终止该进程。
如果它真的是一个无限循环,你会很生气,很快就会杀死它,因为其他应用程序会在盒子上遭受 CPU 饥饿的困扰。如果你是多核的,这不会破坏交易,但看到其他所有东西都变慢仍然会让人恼火。
这将是一个永恒的计划。重新启动或系统挂起将终止该进程
只要给定所有必需的资源,无限循环就会运行。