6

Там я с радостью загружал кучу вещей из Интернета с помощью встроенного в Firefox менеджера загрузок, когда решил проверить академию кода (сайт, который учит вас, как программировать на javascript, классно - по-видимому).

Поэтому, выполнив несколько упражнений, я попал на урок 7 (пункт 4), который требует от вас выполнения условий цикла for чтобы привести i (переменную цикла) к 0. Случилось так, что вместо того, чтобы записать цикл как for (i = 2; i >= 0; i--) который запустит встроенный механизм, который приведет меня к следующему уроку, я "по ошибке" написал, что for (i = 2; i >= 0; i++) , заставляя цикл продолжаться вечно, заставляя Firefox использовать 100% ЦП, ломая все, и сводя на нет все мои попытки перезагрузить страницу или закрыть вкладку.

Сейчас я приостановил процесс через kill -STOP <pid> , но я не хочу закрывать Firefox, потому что я загружаю кучу вещей, которые не могут быть возобновлены, и мне интересно, есть ли способ закрыть это вкладка через командную строку. Может быть, есть способ перечислить все темы Firefox и попытаться закрыть их по отдельности (в худшем случае, я думаю, GDB может помочь мне в этом).

В настоящее время я использую Mac OS X 10.7.2.

3 ответа3

2

Я сделал то же самое на Codecademy. Заполнено что-то не так, и это привело к бесконечному циклу, кажется, что Codecademy не написана, чтобы предотвратить такое плохое поведение, поэтому она повышается до браузера. В моем случае браузер просто ловит это и через некоторое время просит остановить скрипт. Я нахожу странным, что этого не происходит в вашем случае, поэтому я бы посоветовал вам обновить Firefox после решения этой проблемы, чтобы такого рода условия не могли возникнуть снова.

Боюсь, что нет другого пути, кроме как найти гениальный инструмент управления процессами или подключить отладчик, такой как gdb , это может стать очень сложным, если у вас нет отладочной информации. Просто найдите поток, который находится где-то в подпрограммах выполнения Javascript. Если у вас нет отладочной информации и динамических библиотек, я думаю, это будет где-то в xul.so который может быть на любой вкладке.

Если вы каким-то образом выясните, что такое поток загрузки, вы можете попытаться заморозить другие потоки один за другим, чтобы выяснить, какая из них является реальной вкладкой. В худшем случае замораживание потоков не помогает, поскольку поток может удерживать блокировку, которую ожидают другие потоки. В этом случае вам лучше просто завершить процесс и начать все заново с загрузок. Возможно, стоит подумать об огромных загрузках иначе, чем с вашим браузером, если это возможно ...

0

Просто щелкните значок закрытой вкладки и подождите, как только он получит процессорное время, он выключит его. Или нажмите ctrl-w (один раз), пока окно активно, и подождите.

0

Вы на Windows? Если это так, вы могли бы (возможно) использовать ProcessExplorer, чтобы сосредоточиться на неправильно работающих потоках / с и убить их / их - просто ищите постоянное использование ЦП / памяти и имена функций JavaScript. Но будьте очень осторожны - это должна быть точная операция.

В других ОС вы можете использовать отладчик для достижения того же самого - но это довольно хлопотно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .