[WinXP] Как убить подвисающее приложение при общем торможении системы?
для таких случаев у меня всегда в памяти загружен prkiller. Работает с realtime-приоритетом (т.е., даже выше чем у taskmgr выставляется имеет мелкое быстро рисующееся окно (правда, при realtime-приоритете это не имеет значение которое можно вызвать по хоткею, добавляет последние запущенные процессы вверх списка, не задаёт лишних вопросов перед убийством процесса.
либо включи службу telnet и заходи по сети и то же самое делай
чтобы например оно убивалось через минуту подвисания?напиши своего демона - "кнопку бдительности" типа если раз в минуту не нажмешь Shift-Ctrl-ScrlLock то убивается известное приложения. правда запарит нажимать =)
<win><r> taskkill /f /im первые_буквы_имени_исполняемого_файла* <enter>запаришься набирать. Быстрее будет cmd запустить (а консоль, как правило, не тормозит).
проще уж вместо консоли сразу команду-убийцу писать - пропускаем одну промежуточную стадию
а ещё могу посоветовать запускать с пониженным приоритетом опасные программы. вот так:
start /low программа
<win><r> taskkill /f /im первые_буквы_имени_исполняемого_файла* <enter>Я с таким периодически сталкиваюсь при отладке многопотоковых приложений. Среда разработки при этом так подвешивает систему, что даже диспетчер задач вызвать крайне нетривиально, не говоря уж о Win-R
Выставляй минимальный приоритет и никакие дополнительные утилитки не нужны будут.
консоль всё равно откроется. Кроме того, под виндой консоль рисует не приложение, которое в неё вывод осуществляет, а системный процесс, поэтому они быстро рисуются даже при высокой загрузке CPU.
<win><r> taskkill /f /im первые_буквы_имени_исполняемого_файла* <enter>
А оно сработает? А то реакции на нажатие <win> в такой ситуации не вижу. Или главное набрать в слепую и оно даже без отрисовки сработает?
типа если раз в минуту не нажмешь Shift-Ctrl-ScrlLock то убивается известное приложения
Не, это слишком.
Вроде же винда даже сама умеет убивать подвисшее, другое дело считает ли она такое подвисшим?..
вот чем мне нравится 2k и 2k3 - это тем, что снять такое в них значительно легче вне зависимости от
Неужели так отличается от ХР?
Или это типа серверные оси?
Но вроде и в ХР есть галочка, которую можно перевести в "приоритет для фоновых приложений"?.. Или это не оно?
в том то и дело, если угадаешь момент когда win-r уже запустился (возможно не нарисовался, но сообщения принимает) и вслепую набрал указанное, то оно через какое-то время сработает. способ не стопудовый, потому как можно "промазать" и набрать команду не в то окно - в условиях торможения это более чем реально. так что лучше поставь prkiller который тут советовали.
она (винда) убивает подвисшее после того как ты дал команду на закрытие и после отсутствия реакции на эту команду со стороны приложения в течении N секунд. интервал вроде твикерами настраивается, но в общем случае винда по своей инициативе никого убивать не будет, что достаточно разумно - ведь если какая-либо программа запустит могучие долгие вычисления в основном потоке, то она с точки зрения операционки "зависнет", просто на самом-то деле она по завершении полезной работы "отвиснет" и обработает сообщения из своей очереди.
если какая-либо программа запустит могучие долгие вычисления в основном потокеСтрого говоря, это неправильная программа.
п.с.: Вот интересно, а у 7-ки как с этим? Или чуда не случилось (всё-таки в нормальной оси у приложения не должно быть ни единого шанса повесить систему)?В семерке еще такого не наблюдал. Все, что зависало и не давало закрывать окно приложения с убийством процесса замечательно убивалось через таск манагер
Строго говоря, это неправильная программа.согласен, но это же не повод резать ей яйца. может это какой-то перебор, который пользователь накатал за 5 минут в любимой среде любимого языка, ему что, в обязательном порядке многопоточность прикручивать?
попробуй завесить многопоточную прогу в режиме интерактивной отладки
может это какой-то перебор, который пользователь накатал за 5 минут в любимой среде любимого языкаЯ в любимой среде любимого языка делаю консольные программы, которые почему-то безо всяких проблем реагируют на CtrlC и CtrlBreak (несмотря на то, что в это время у них идёт мегаперебор соответственно, зависшими их считать нельзя. Конечно же, руками я там обработку этих клавиатурных сочетаний не реализую.
Подозреваю, что результат в любой другой приличной среде с приличным языком будет тем же.
Вообще, с таким зависанием я сталкивался только у графических программ - а такое уже непонятно зачем накатывать за 5 минут, уж лучше консольное. Графическая программа должна делать вычисления не в основном потоке; основной поток - для обработки сообщений.
ну понятно, что в консольной есть какие-то обработчики по умолчанию. а графическую прогу для вычислений можно делать в том случае, если хочешь например на халяву поиметь диалоги выбора-сохранения файла или еще какие-то компоненты, которым форма нужна. в этом случае обычно ломает делать отдельный поток и вся обработка вешается на волшебную кнопку "пыщь". это конечно не правильно, зато быстро и результат в любом случае будет получен.
это конечно не правильно, зато быстроНу да, сэкономили пару строчек кода.
Ну да, сэкономили пару строчек кода.отдельный поток для решения задачи топикстартера не поможет, а может даже ухудшиться ситуацию.
жесткий случай - программа поднимает штуки 4 потока с повышенным приоритетом в которых что-то считается, при этом главный поток продолжает работать в нормальном режиме.
в итоге, такая шняга "завесит" винду нафиг, но при этом с точки зрения винды приложение будет нормальным - не зависшим.
штуки 4 потока с повышенным приоритетом в которых что-то считается, при этом главный поток продолжает работать в нормальном режимеНу это уже надо специально постараться, чтобы такое написать.
Оставить комментарий
durka82
Бывает, что приложение начинает вести себя так, что забивает управление (оно практически не реагирует) и проще оказывается сделать хард-резет.Да и с играми такое бывает.
В общем случае я так понимаю задача не решается, но вот если заранее известно "плохое" приложение, то можно сделать, чтобы например оно убивалось через минуту подвисания?
Ну или чтобы можно было настроить комбинацию клавиш (даже на кратковременное нажатие кнопки Выключения питания) на убивание текущего приложения?
В крайнем случае, чтобы такое можно было провернуть по сети (если она конечно первая и не отвалится).
п.с.: Вот интересно, а у 7-ки как с этим? Или чуда не случилось (всё-таки в нормальной оси у приложения не должно быть ни единого шанса повесить систему)?