javascript - 为什么我的整个 Ubuntu 系统会因为 Firefox 中有问题的 javascript 代码而卡住?

标签 javascript ubuntu firefox freeze

我在 Ubuntu 18.04 和 19.04(也是全新安装)、Firefox 64 - 66.0.3(全新)中遇到了一个奇怪的问题。我正在编写一些 JavaScript 代码并在我的浏览器中检查它。有时我会犯这样的错误:

for(var i = 0; i < 100;){
   something_else();
}

也就是无限循环。上次是一个 new Regex(...).test() 有一个错误的正则表达式,这显然导致了无限循环......我应该小心,没错,但问题是:

不仅我的 Firefox 会说“此页面不正常,请关闭它吗?”但系统本身不会说“这个 Firefox 不好,杀了它?”之类的话。

我的系统完全卡住,没有任何恢复的机会。我所能做的就是 Alt+SysRq+REIUSB。因此调试我的代码变成了 1978 年的一个问题,多次重启,未能保存代码意味着丢失它。对我来说,这听起来很疯狂。

我重装了几次 Ubuntu,在 18.04 和 19.04 之间切换,更新了软件,都无济于事。 CPU 似乎足够酷,没有屏幕闪烁,也没有其他明显的硬件问题。

UPD:我还运行了 sudo stress --cpu 4 来检查 100% 负载时会发生什么。系统不会死机。

所以,问题。我究竟做错了什么?为什么我的操作系统或 Firefox 不拦截这些卡住?

最佳答案

如您所料,Firefox 应该提示您停止脚本,因为它是一个无限循环,使时间远离 UI,并且应该可以以任何一种方式终止 Firefox 进程。但是,如果脚本 使用越来越多的内存,那问题就大了。根据我的经验,Linux 不能很好地处理 OOM 情况,尤其是在旧内核版本中——例如,Ubuntu 可能仍在使用。

一个有用的工具是 SysRq+F(通过检查 sysctl kernel.sysrq 确保它已启用;值为 1 或设置了第 6 位 – x & 64 ≠ 0 – 表示它是),它手动运行 OOM killer 。

关于javascript - 为什么我的整个 Ubuntu 系统会因为 Firefox 中有问题的 javascript 代码而卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56640068/

相关文章:

php - 在 Ubuntu 中创建 Laravel 应用程序时出现错误

c# - 从 Gecko 拦截(和重定向)样式表、图像和字体加载

javascript - 突变观察者未移除。为什么? (795978错误)

javascript - 克隆div元素并使用相同的按钮操作原始元素和克隆元素?

ubuntu - apt-cache 显示同一个包的 2 条记录?

javascript - 显示多个选择器中的 1 个

ubuntu - libcudart.so 的路径是什么?

php - 标题页中的兼容性浏览器(悬停)与 firefox

javascript - UIWebView 中的 UIStepper - iOS

javascript - 添加超链接的数据格式化程序不起作用