Как стать автором
Обновить

Комментарии 82

Простите, что спрашиваю, а shutdown /f тоже не помогал?
Нет, не помог.
Я так понимаю, что /f это эквивалент ExitWindowsEx(… | EWX_FORCE | EWX_FORCEIFHUNG, ...), а тот же EWX_FORCE, судя по MSDN, в терминальной сессии не работает.
Вы меня заинтересовали! Не подскажите, что нужно попробовать сделать, чтобы закрыть FAR и оставить висеть окошко «зомби»?
Подтверждаю проблему. Windows 7 64-bit, Far Manager 2.0.1666 64-bit. Очень часто при аптайме более недели и количестве фаров более одного, при попытке закрытия фара остается консольное окно, а то и два. Бывает пропадает оно через минут 5-10, а иногда приходится и перегружать. А я все думал это из-за того, что у меня 3 шестерки в версии фара.
А с последним фаром (1807) воспроизводится?
Я пользуюсь ConEmu для FAR'а. Насколько я знаю, он сам создает-убивает консоли (которые делает невидимые). Очень рекомендую (не только из-за консолей, там много действительно удобных функций).

Сейчас посмотрел — после около 2-недельной прегрузки не заметил висящих процессов.

Версия 2.0 build 1807 (x86)
Хорошая программа, но иногда умирает сама и тогда получаем несколько «маленьких фарчиков», с которыми уже ничего нельзя сделать (клавиатурный ввод не принимают, размер не меняют). Приходится убивать процессы. А так, активно ей пользуюсь, очень удобно.
Какую точно последовательность действий нужно сделать для FAR я не знаю, но масса вариантов создать окно-зомби приведена в блог-посте VS Debugger Team, ссылка на который есть в статье. Сам я за прошедший год натыкался на такое 3-4 раза.
Всего-то надо было закрэшить win32 subsystem (csrss.exe)
И потом узнать что опция «Автоматическая перезагрузка при крахе системы» случайно отключена :)
Включена.
Сообщений о крэше csrss я EventLog нет. И, судя по всему, до крэша дело не доходит, больше похоже на то, что win team просто проморгали ошибку.
Насколько я понял, zed91 предложил вам альтернативный способ перезагрузки.
Ааа… Нет, это слишком просто :)
ну или любой другой важный процесс. Например winlogon.exe
убиение winlogon приведет к завершению logon-сессии, но перезагрузки не будет. Актуально для NT6+
В Task manager во вкладке processes сделать End process tree для процесса System.
После сообщения о том, что в доступе отказано, вылезет таймер с сообщением, что важная часть винды покрошилась и винда будет перезагружена через минуту.

P.S. shutdown -a может отменить перезагрузку. А вот подобные консольные окна выключению не мешают.
использовать *nix?
Интересен ваш подход. А столкнувшись с первым багом — искать третий путь, да? Или в *nix-системах баглисты девственно чистые?
Тут человек столкнулся с проблемой, разобрался, докопался до сути почему это происходит, нашел workaround, поделился со всеми кому было бы полезно, молодец вообщем. А вот вы зачем зашли в блог Windows с таким комментарием совсем неясно.
Да ладно, «неясно» вам :)
нет не потролить )
Кушать охота, очевидно же.
В *nix неубиваемые зомби тоже существуют. Только перезагрузке не мешают :)
бывали случаи когда shutdown не отрабатывал и reboot -f тоже. на помощь конечно приходили SysRq комбинации.
reboot(0x0xfee1dead, 537993216, 0x1234567, 0);
особенно актуально, когда что-то не так с системным диском, и бинари не читаются.
процессы в состоянии D могут весьма помешать перезагрузке
ну тоесть в предыдущем комменте я имел ввиду линукс,
процессы в состоянии «Uninterruptible sleep»,
и перезагрузку командой reboot -f (а не telinit 0 или 6)
Еды не будет. Худейте.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Кстати да, на R2 я с ней тоже не сталкивался…
Хотя, учитывая, что возникла она у меня не так часто, может быть просто повезло? :)
Ещё возможный вариант, убивать Thread'ы зависшего процесса через Process Explorer.
А где вы тут увидели зависший процесс?
Извиняюсь в двойне, после второго абзаца пропустил строчку про отсутствие процесса в списке задач.
Может где-то можно найти больше информации о технической стороне данного бага? гуи призрак процесса, штука крайне странная…
Ссылки я приводил в тексте:

Help! My console windows won't go away
blogs.msdn.com/b/debugger/archive/2010/03/11/help-my-console-windows-won-t-go-away.aspx

You cannot close a console window of an application after you stop debugging the application in Visual Studio on a computer that is running Windows XP or Windows Server 2003
support.microsoft.com/kb/982551/en-us

И хотя тут речь идет об XP и Windows 2003, симптоматика совпадает. По всей видимости, здесь имеет место быть все та же ошибка в csrss, который обслуживает консольные окна.
Надо было воспользоваться Native API функцией NtShutdownSystem из ntdll.dll
То есть написать простенькую утилиту на С, которая бы делала динамическую загрузку этой функции из библиотеки и вызов её с соотв. параметром. Перезагрузка в этом случае мгновенная и без каких-либо рассылок сообщений процессам и т. п.
Чукча не читатель, чукча писатель?
Прочитал по диагонали
Я заметил.
Линуксойды завидуют молча :))

PS uptime 668 дней :)))
Рад за вас. А если бы вы еще и не выступали не по делу, был бы рад двойне.
<> Для форточников :)
парсер съел слово sarcasm
Вы это серьезно? Пофапать на цифру аптайма важнее обновлений системы? Ну да, одминчег одним словом…
ребутиться каждый первый вторник месяца важней доступности сервисов?
или без апдейтов система принципиально жить не может?
нет нет не подумайте она у меня обновляется регулярно ;)
Забавно видеть одминчегов, ни хрена не понимающих ни в винде ни в линуксе, но Имеющих Мнение.
Если система не попросила перезагрузки, это не значит что изменения применены (то есть в системе ДЕЙСТВИТЕЛЬНО исполняются новые версии бинарных файлов) — это всего лишь означает, что обновился бинарник на диске. Таким образом, если Вы не перегружаете систему (или не перезапускаете затронутые сервисы, что не всегда возможно) после применения адпейтов безопасности, то Вы попросту получаете систему БЕЗ этих апдейтов в памяти.

И да, не нужно про ksplice. Технология, запатентованная в 2002-м и внедренная в продакшн начиная с Server 2k3 была очевидным образом украдена при помощи машины времени.
Ну запатентована. Ну внедрена. А толку?
ни хрена не понимающих ни в винде ни в линуксе
Вот второе точно про вас, хоть и про виндовс ваши статьи читал с интересом.

Какую софтину или библиотеку показать вам?
программное обеспечение пере запускается при обновлении, библиотеки новые подхватываются как раз в момент очередного обращения к ним.
Часть библиотек, возможно, не будет подхвачены ядром, но ничего криминального в этом не вижу, т.к. (файрволл — демоны — ядро) на первых 2х этапах если всё будет в актуальном состоянии и настроено нормально, то ничего не случится.
>>Технология, запатентованная в 2002-м и внедренная в продакшн начиная с Server 2k3
Видимо как-то не так введена ;)
Какую софтину или библиотеку показать вам?
Да практически любую. Вот порядок вызовов при выполнении «apt-get upgrade»:
DoUpgrade
	pkgAllUpgrade
		InstallPackages
			pkgPackageManager::DoInstall
				pkgPackageManager::DoInstallPostFork
					pkgPackageManager::OrderInstall
						pkgPackageManager::SmartUnPack
							pkgDPkgPM::Install

				pkgPackageManager::DoInstallPostFork
					pkgDPkgPM::Go
						execvp("dpkg", "--unpack --auto-deconfigure ...")

Ну и dpkg:
archivefiles
	process_archive


И уже process_archive просто распаковывает архив. По пути выполняются pre/post install скрипты, которые и ответствены за просьбы о перезапуске.

Вот пример апдейта запущенного приложения и загруженной библиотеки (обратите внимание, что никаких запросов на перезапуск наутилуса нет):


И если НЕКОТОРЫЕ (подавляющее меньшиство, в том числе исключая практически все демоны) приложения (такие как firefox) дергают update-notifier из постинстала для просьб о перезапуске, то библитеки практически никогда ничего не говорят.

Часть библиотек, возможно, не будет подхвачены ядром
При чем здесь ядро? В винде ядро вообще обновляется раз в несколько лет.

Видимо как-то не так введена
Да все так. Перезагрузки/перезапуски требуются только если есть апдейты структур данных.

В связи с тем, что в отличие от винды, система апдейтов линукса слишком глупа чтоб сообщать о необходимости перезагрузки, я бы рекомендовал Вам перезапускать линукс после КАЖДОГО апдейта.
ksplice
LinuxHadItFirst™ at its finest. Спасибо
Если честно, то я не особо заметил, чтобы кто-то где-то (кроме вас в этом посте и посте выше) хоть как-то упомянул о «first» или «не first».
Я понимаю что фар такой православный но текстовый интерфейс на 2008 сервере крутить уже похоже на извращения. Следующий раз ставте тотал коммандер (редакция от сема, нормальный тотал, без всяких саморобных аппендицитов)
+1 или любой из фриваре аналогов, FreeCommander
О, давай еще holly war по этому поводу устроим? FAR vs XXX? Какая нафиг разница, FAR, не FAR – проблема относится к консоли вообще, проблемы с FAR – это ее частное проявление!
А с чего вы взяли что проблемы относятся к консоли? Проблемы относятся вероятно к криво написанному FAR-у. У MS есть гайды как именно писать ПО. Это не прихоть, не требование, это преподносится в виде рекомендаций. Хочешь — можешь на них забить, не вопрос. Но потом и появляются продукты которые например ставят себя в «C:\Program Files (x86)\», а при запуске пытаются найти свои же .dll в папке «C:\Program Files\».
Подозреваю что есть какой-то косяк именно в FAR. У меня много серверов на 2008 и я ни разу не сталкивался с описанной проблемой вообще. Но FAR я не пользуюсь.
А «holly» — это падуб, это такой род деревьев и кустарников семейства падубовые, я не пойму как, чем и с кем они могут воевать.
> А с чего вы взяли что проблемы относятся к консоли? Проблемы относятся вероятно к криво написанному FAR-у.

1. Внешние проявления один в один совпадают с другой проблемой (остановка консольного приложения под отладчиком в VS2008), в которой виноват csrss (подтверждается ссылками на KB).

2. Я опубликовал этот пост не только здесь, и в одном из комментариев было указано, что такая проблема бывает не только при использовании FAR.

> У MS есть гайды как именно писать ПО.

IMHO гайды гайдами, а прибраться за процессом, даже если он рухнул с треском и грохотом, святая обязанность ОС. В данном случае с очень высокой вероятностью FAR (и не только он) делает что-то непредусмотренное, и как результат остается висеть окно консоли, а его обслуживает как раз часть ОС.

> А «holly» — это падуб, это такой род деревьев и кустарников семейства падубовые, я не пойму как, чем и с кем они могут воевать.

Holly shit, как же я так облажался-то?!.. :)
3. Время возникновения проблемы (около года) совпадает со временем возникновения крайне похожей проблемы в XP и 2003-м сервере.

Из 1, 2 и 3 IMHO с высокой вероятностью следует, что это одна и та же проблема, но в W2K8 ее по каким-то причинам поймать сложнее, поэтому W2K8 в эти KB articles и не упоминается.
Фар:
  • бесплатен для ex-USSR чуть ли не с самого начала;
  • год назад 1.75 стал бесплатен для всех;
  • а три года назад, с версии 1.8 еще и открыт под BSD-like лицензией;
  • имеет действительно богатые клавиатурные комбинации и систему макрокоманд;
  • максимально эффективно использует всю площадь экрана;
  • работает даже в Windows Recovery Console;
  • теснее всех «аналогов» интегрируется c командной строкой.

Эти достоинства реальны и осязаемы для многих, безо всякого «православия», ненависти к «детско-бухгалтерским» интерфейсам, и начиненных сюрпризами сборках проприетарного ПО неизвестного происхождения.
CMD:
— Бесплатен для всех кто купил винду;
— Год назад все еще был бесплатен;
— А три года назад приобрел себе клёвого корефана по имени Powershell. который умеет жонглировать .NET-объектами;
— Не имеет богатые клавиатурные комбинации (ибо не нужны) и системы макрокоманд (потому что скрипт будет и правильнее, и более гибкий чем макрокоманда);
— Вполне эффективно использует площадь экрана;
— Позволяет FAR заработать в Windows Recovery Console;
— Является сам командной строкой.
Эти достоинства реальны для админов. А тем кому надо с диска на диск удобно копировать файлы — им лучше GUI нормальный подходит, тот же Free Commander озвученный выше, я и сам для этих целей им пользуюсь. Вы лучше мне объясните зачем именно FAR для этого использовать? Дань историческим предкам, или там реально есть уникальный и неповторяемый в нормальных виндовых файл-менеджерах функционал?
А давай по поводу PowerShell устроим Holly War? ;-) Честно говоря, при всех его достоинствах более ублюдочного скриптового языка (ну, кроме Perl) я не встречал… Даже всевозможные *nix shells лучше – от чистого shell по крайней мере много не ждешь… :) Ну а учитывая высказывания разработчиков, что вдохновение они черпали из Perl… IMHO перебрали они с вдохновением :)

P.S. При всем при этом в интерактивном режиме PowerShell меня вполне устраивает :)

P.P.S. Как раз по этому поводу я замутил небольшой проект, который поддерживает PowerShell Session в рамках приложения, но для связывания вызовов используется C#. Да-да, я прекрасно знаю, что в C# дернуть PS – это три строки, но в классическом C#-приложении слишком много обвязки, которая убивает всю прелесть скриптинга. Когда (если) найду время перевести его из стадии «прототип» в стадию «ну, в принципе, жить можно» — опубликую :)
> А давай по поводу PowerShell устроим Holly War
А давай. Только сначала расскажи что такое Holly War.

> более ублюдочного скриптового языка (ну, кроме Perl) я не встречал… Даже всевозможные *nix shells лучше – от чистого shell по крайней мере много не ждешь…
Какие Ваши доказательства?

> который поддерживает PowerShell Session в рамках приложения, но для связывания вызовов используется C#
Подробнее, пожалуйста. PSHost? О каком «связывании вызовов» идет речь? C# ничего не связывает, и в C# и в PS «вызовы связывает» CLI или я чего то не понимаю?

> но в классическом C#-приложении слишком много обвязки, которая убивает всю прелесть скриптинга.
Не понял, а как же «три строчки»?
> А давай. Только сначала расскажи что такое Holly War.

Тоже самое что и «Holy», но так интереснее, т.к. это сбивает оппонента с толку.

> Какие Ваши доказательства?

1) Множество опций, влияющих на выполнение скрипта;
2) Неявные отличия при обращении к commandlets и методам .net-объектов;
3) Неоправданные трудозатраты при создании сложных структур данных вручную;
4) Синтаксические изыски, которые где-то sugar, а где-то головная боль;
5) Неявные преобразований типов где только можно;
6) Отсутствие не только спецификации на скриптовый язык, но и элементарного step-by-step guide!

Является ли это непреодолимым препятствием при работе с PowerShell? Нет. Но это делает написание сколько-нибудь нетривиальных скриптов делом очень некомфортным, слишком много моментов приходится держать в голове.

Тем не менее, доказывать я что-то не хочу. Мне не нравиться, я найду workaround и опубликую результат. Если найдутся единомышленники – отлично, нет – переживу.

> Подробнее, пожалуйста. PSHost? О каком «связывании вызовов» идет речь? C# ничего не связывает, и в C# и в PS «вызовы связывает» CLI или я чего то не понимаю?

Под «связыванием вызовов» я понимаю нетривиальную обработку результатов выполнения commandlets перед тем, как передать их дальше (отдать следующему commandlet, сохранить в файл и т.п.). Нетривиальную обработку МНЕ комфортнее сделать на C#.

> Не понял, а как же «три строчки»?

Создание ps host – три строчки. А вот обвязка (namespace/class/method), проект, build scripts (не запускать же каждый раз VS для сборки проекта) и т.п. – не три и даже не 33 ;-)
1. Каких опций? Ключей powershell.exe? Параметров самого скрипта?
2. Это да. Но на «более ублюдочного не встречал» не тянет.
3. Какие затраты?
4. Пример можно?
5. Неявно преобразуется только IEnumerable в массивы. Иногда это мешает, но в большинстве случаев помогает
6. Спецификаций нет только в общем доступе. Документация же весьма обширная. Какого именно step-by-step гайда не хватает?

> Мне не нравиться, я найду workaround и опубликую результат.
Это гипотетически, или Вы действительно сейчас ищете чему то воркэраунд?

> Под «связыванием вызовов» я понимаю нетривиальную обработку результатов выполнения commandlets
Дык эта. Возвращается просто массив .net объектов. Чего там сложного? С другой стороны, можно просто добавить C# сборку прямо в PS (как собранную, так и в исходниках).

> А вот обвязка (namespace/class/method), проект, build scripts (не запускать же каждый раз VS для сборки проекта) и т.п. – не три и даже не 33 ;-)
Хех, а при чем здесь PS? Если уж кто и «виноват», то C#. Но Вы же сами сказали, что Вам так УДОБНЕЕ.
> 1. Каких опций? Ключей powershell.exe? Параметров самого скрипта?

$ConfirmPreference, $DebugPreference, $ErrorActionPreference, $ErrorView, $FormatEnumerationLimit, $MaximumAliasCount, $MaximumDriveCount, $MaximumErrorCount, $MaximumFunctionCount, $MaximumHistoryCount, $MaximumVariableCount, $OutputEncoding, $ProgressPreference, $ReportErrorShowExceptionClass, $ReportErrorShowInnerException, $ReportErrorShowSource, $ReportErrorShowStackTrace, $VerbosePreference, $WarningPreference, $WhatIfPreference

Достаточно? Причем часть через common parameters не перекрывается. Happy debugging!

> 2. Это да. Но на «более ублюдочного не встречал» не тянет.

Одна-две проблемы не тянет, тут все дело в сумме.

> 3. Какие затраты?

Complex Data Structures

1) Объект с custom members я создать могу… Но через такую задницу!
2) Использование хешей частично решает проблему с complex data sturctures… Но наличие множества вариантов доступа к ним не улучшает читаемость кода.

> 4. Пример можно?

1) $x = 123; "($x)"; '$($x)' — напортачил где-от с кавычками и привет, happy debugging!
2) Вторий пример приведен выше.

> 5. Неявно преобразуется только IEnumerable в массивы. Иногда это мешает, но в большинстве случаев помогает

Неявно практически ВСЕ преобразуется в PSObject (почему – понятно, но настроение это не улучшает), и, в частности, при работе с XML приходится постоянно дергать PSBase. Мелочь, но таких мелочей много.

> 6. Спецификаций нет только в общем доступе. Документация же весьма обширная. Какого именно step-by-step гайда не хватает?

Вот в том-то все и дело, что step-by-step guides кучи, а спецификации нет. Этот «обучение на примерах» сильно… напрягает.

> > Мне не нравиться, я найду workaround и опубликую результат.
> Это гипотетически, или Вы действительно сейчас ищете чему то воркэраунд?

Я хочу совместить простоту создания и поддержки скрипта с блэк-джеком и exotic dancers от C#. Могу дать ссылку на условиях NDA.

> > Под «связыванием вызовов» я понимаю нетривиальную обработку результатов выполнения commandlets
> Дык эта. Возвращается просто массив .net объектов. Чего там сложного? С другой стороны, можно просто добавить C# сборку прямо в PS (как собранную, так и в исходниках).

Что сложного? IMHO код плохо читается.

> > А вот обвязка (namespace/class/method), проект, build scripts (не запускать же каждый раз VS для сборки проекта) и т.п. – не три и даже не 33 ;-)
> Хех, а при чем здесь PS? Если уж кто и «виноват», то C#. Но Вы же сами сказали, что Вам так УДОБНЕЕ.

Как мне удобнее я для себя уже определил :)
1. Из всех этих переменных только $ErrorActionPreference существенно меняет поведение, да и то только при наличии, собственно, ошибок.
2. Ну вот и пытаюсь разобраться где же сумма. Бесшовную интеграцию с дотнетом лично я считаю громадным плюсом, хоть и за счет небольшой неконсистентности синтаксиса
3. Нет там никаких затрат. Совсем нет. Серьезно. В самом худшем случае (если кроме ассоциативных, обычных массивов и NoteProperty-ей нужно что то еще, что в общем то случается редко) — можно в пять строк сделать «фабрику»
4. Это не изыски, а вполне нормальная практика. Уж всяко лучше чем бесконечные «Total: » + total + "\n" (или чего доброго sprintf, не говоря уже о std::ostringstream-ах, свят-свят)
5. Все преобразуется? Вот к примеру в ВАШЕМ павершелле, что выводится на
[Environment]::OSVersion.GetType()

А так
(gwmi Win32_OperatingSystem).GetType()


Что же до xml — это вообще откуда взяли?
$xml = [xml]"<tag attr='value' />"
echo $xml.GetType()
echo $xml.SelectSingleNode("/tag").GetType()
echo $xml.tag.attr

Можно работать и в С# style (потому что сам объект это самый обычный XmlDocument) и через весьма удобный сахар, добавляющий все теги и атрибуты в проперти объекту.
6. Мне кажется Вы неверно понимаете значение слова спецификация. Вот например на ECMAScript или там C# спецификации в общем доступе есть, но никто по ним эти языки не учит. Спецификации они не для пользователей — они для разработчиков реализаций. В данном случае, МС не хочет third party реализаций, это не является недостатком first party реализации

> Я хочу совместить простоту создания и поддержки скрипта с блэк-джеком и exotic dancers от C#. Могу дать ссылку на условиях NDA.
Все еще не понимаю, о чем Вы говорите, но нераспространение обещаю. Напишите мне в личку подробности, пожалуйста.

> Что сложного? IMHO код плохо читается.
Какой код? foreach? Да нет не плохо.

> Как мне удобнее я для себя уже определил :)
Дык я ж не против этого. Я против того, чтобы Вы сначала говорили, что C# Вам удобнее павершела, а потом приписывали павершелу «недостатки» сишарпа.
Точно! Особенно в Windows Server 2008 Core… ;-)
Должен заметить, что комментаторы, ничего не понявшие в обсуждаемой теме, но торопящиеся высказать свое мнение, так забавляют…
Причитал пост и комменты, блин товарищи вы такой фигней страдаете, все эти мысли и рассуждения, kill -9 решает все.
А аминазиновая терапия вообще творит чудеса.
У меня на Windows Server 2008 не работает kill -9
ЧЯДНТ?
Поставь Cygwin. Работать все равно не будет, но по крайней мере перестанет ругаться, что «kill is not recognized as an internal or external command...» ;-)
Есть идея получше:
PS C:\> gal kill

CommandType     Name                                                Definition
-----------     ----                                                ----------
Alias           kill                                                Stop-Process


А с цигвином лучше вообще не связываться. То есть совсем
Why? Чем тебе rsync, whois и wget не угодили?
rsync для бекапа? Есть ЗНАЧИТЕЛЬНО более качественные средства.
whois нужен редко и воспользоваться вебом мне проще, чем таскать за собой цигвин. Уж если чего таскать, то лучше так
Ну и wget туда же: для простого скачивания по http есть System.Net.WebClient, для рекурсивного скачивания сайтов (лет 10 уже таким не занимался) есть более подходящие средства.
> rsync для бекапа? Есть ЗНАЧИТЕЛЬНО более качественные средства.

Зависит от ситуации. В некоторых применениях он может сэкономить время.

> whois нужен редко и воспользоваться вебом мне проще, чем таскать за собой цигвин. Уж если чего таскать, то лучше так

И самому мейнтейнить еще один скрипт? Нет уж, пусть лучше GNUсники за меня черную работу делают :)

> Ну и wget туда же: для простого скачивания по http есть System.Net.WebClient, для рекурсивного скачивания сайтов (лет 10 уже таким не занимался) есть более подходящие средства.

Тут опять – либо мейнтенйнить скрипт, либо каждый раз писать несколько больше, чем «wget .../ -O data.txt».

Впрочем, тут зависит от ситуации. Не могу сказать, что я пользуюсь этими утилитами часто (даже не каждый день), но я к ним привык. Тяжелое детство, черный экран, linux… ;-)
Ну и меня тоже было такое «тяжелое детство», но с тех пор я в полной мере осознал ущербность преобразования структурированных данных в human-readable формат и обратно с потерями по пути. Собственно, мне не нравятся не конкретно эти утилиты, мне не нравится ВЕСЬ cygwin/mingw/unxutils/…
Не ту OS поставил :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории