User Tools

Site Tools


Sidebar


Здравствуйте!

Меня зовут Михаил!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Моя специализация - виртуализация!

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!

mike@autosys.tk
+7 (910) 911-96-23

ms_windows_ms_sql:close_all_file_handlers_by_path_or_process_name

Проблема

на терминальном сервере заглючил Citrix Profile Manager и остались открытыми кучи file handlers в профилях пользователей. Завершить процесс Citrix Profile Manager безболезненно нельзя, но файлы с зависшими file handlers удалить необходимо.
С помощью Process Explorer можно закрывать по одному хендлеру, но если их много сотен, то это не выход.

Решение

У Sysinternals есть утилита Handle.
Утащил к себе: handle.zip
Эта утилитка предоставляет интерфейс командной строки к функционалу Process Explorer. Копируем handle.exe в c:\windows\system32.
Для закрытия всех хендлеров в заданной папке в командной строке с правами администратора выполняем:

for /f "tokens=3,6,8 delims=: " %i in ('handle e:\folder_name\') do echo Releasing %k & handle -c %j -y -p %i

Также можно добавить фильтр по имени процесса (указав в вызове handle -p processname):

for /f "tokens=3,6,8 delims=: " %i in ('handle -p eclipse e:\git\') do echo Releasing %k & handle -c %j -y -p %i

Если добавить в систему grep.exe из GnuWin32, то можно закрывать хендлеры только определенного типа файлов:

for /f "tokens=3,6,8 delims=: " %i in ('handle -p eclipse e:\git\ ^| grep .xml') do echo Releasing %k & handle -c %j -y -p %i

Хотя последний вариант можно исполнить и без grep, заменив его на виндовый find.

for /f "tokens=3,6,8 delims=: " %i in ('handle c:\users\ ^| find "AppData\Local\" ^| find ".tmp"') do echo Releasing %k & handle -c %j -y -p %i

Чтобы быстрее закрывать эти хендлы если их много можно использовать start перед последним вызовом handle. В этом случае скрипт не будет дожидаться закрытия handle каждый раз.

Если handle is invalid

Если при закрытии хендла появляются сообщения типа Handle is invalid или просто Error T, то предлагается сделать так:

fsutil reparsepoint delete <file name>

Discussion

Enter your comment. Wiki syntax is allowed:
D L M K L
 
ms_windows_ms_sql/close_all_file_handlers_by_path_or_process_name.txt · Last modified: 2016/07/07 09:43 by mike