Что это вообще такое и зачем оно нужно?
Когда-то один разработчик 1С устал вручную лазить по Диспетчеру задач, выискивая среди svchost.exe и chrome.exe тех самых rphost-ов, 1cv8-ов и прочих агентов 1С. Особенно весело становилось, когда надо было понять какого %$#^ именно rphost’а использует вот эта база, кто его запустил и почему он ест процессор на 146%
Это скромная, но полезная внешняя обработка, работающая как инструмент точечного мониторинга процессов — эдакий Диспетчер задач++. Она функционирует в тандеме с PowerShell, что позволяет глубоко, быстро и удобно анализировать все запущенные процессы, детально отображая те, что касаются инфраструктуры 1С. Разумеется, обработку можно и подключить к конфигурации, не открывая каждый раз из файла.
1. Получение списка процессов через PowerShell
Используется PowerShell-скрипт, вызываемый с параметрами. Скрипт получает список процессов, исключая системные (по имени) и собственные (определяется по -tag From1C). Для каждого процесса сохраняются: имя, ID, путь к исполняемому файлу, владелец, командная строка. Если 1С запущена не от имени администратора — используется обход: скрипт работает без получения владельца чужих процессов или запускается через планировщик задач (если есть права).
2. Ожидание CSV-файла
Функция не бросается сразу читать результат — сначала он асинхронно ожидает появления файла с ненулевым размером. Это защищает от попытки чтения недописанного файла (да, CSV-файл может ещё дописываться в момент, когда его уже видно на диске). Если CSV-файл по какой-то причине не появляется вовремя, вы просто увидите уведомление.
3. Чтение CSV и буферизация
Результаты из CSV читаются построчно. Процессы помещаются сначала в ЗапущенныеПроцессыБуфер, а затем фильтруются и отображаются в ЗапущенныеПроцессы. Буфер хранит всю информацию: владельца, командную строку, путь, ID и флаг "Процесс1С". Системные или “битые” процессы без пути автоматически исключаются — не ищите среди них своих rphost-ов.
4. Разбор командной строки 1С
Используется функция РазобратьКоманднуюСтроку(), которая извлекает:
- Имя базы (/IBName)
- Путь базы (/F, /S)
- Пользователь (/N)
- Версию (из пути 1cv8...)
- Флаг отладки (/debug или -debug — привет, раздвоение личности)
- Порты и параметры серверов (-range, -regport, -reghost)
В парсере применяются два типа извлечения параметров:
- ИзвлечьКлючБезПробела — для ключей типа /IBNameБаза
- ИзвлечьКлючСПробелом — для ключей типа -range 1560:1591
Если вдруг кому-то кроме меня понадобится парсить ещё что-то — пишите, добавлю возможность расширять список параметров в пользовательском режиме.
5. Фильтрация и детализация
Отображение можно ограничить по следующим критериям:
- Только 1С-процессы (сюда же входят процессы SQL Server: sqlservr.exe, sqlagent.exe, sqlwriter.exe, sqlceip.exe, потому что без них базу не покрутишь)
- По имени базы (если удалось извлечь имя из командной строки)
- По владельцу (для быстрой навигации между пользователями)
- По “общему фильтру” (см. ниже)
Детализированное наименование (опционально включаемое флажком) включает всё:
Конфигуратор 1С 8.3.24.1624, база: Управление торговлей (демо) 11.4, п-ль: Администратор (ОрловАВ), порты: 1560:1591, рег. порт: 5000 (с отладкой)
Все фильтры работают одновременно — если указаны фильтр по базе, пользователь и общий фильтр, отображаются только те процессы, которые подходят под все условия сразу.
6. Удаление процессов
Завершение процессов по ID через PowerShell (Stop-Process -Id ... -Force). Если есть права администратора — вызывается через планировщик под системным пользователем. Возможные ошибки фиксируются и выводятся построчно.
7. Открытие расположения исполняемого файла
Работает даже при множественном выборе. Учитывает уникальные пути, не открывает одну и ту же папку по 5 раз. Для каждого выбранного файла открывается его папка стандартным проводником Windows с выделением самого файла.
8. Массовое завершение всех процессов 1С пользователя
Можно одним нажатием завершить вообще все процессы 1С, запущенные от имени выбранного пользователя. Это полезно для быстрой “зачистки” зависших сессий или чтобы выгнать пользователя из всех баз. Перед нажатием убедитесь, что пользователь доделал свою работу — голубая кнопка ничуть не менее опасна, чем красная. При этом диспетчер всегда спросит подтверждение, чтобы избежать случайных массовых завершений.
9. Общий фильтр и троттлинг
Над списком процессов есть строка “Общий фильтр”. Введите туда часть имени процесса, ID, путь, имя пользователя или базы — увидите только подходящие строки. Фильтрация работает по всем этим полям одновременно.
Если процессов становится больше определённого количества (значение регулируется параметром “Порог троттлинга”), включается специальный режим с троттлингом: поиск и обновление списка происходят не чаще раза в секунду, чтобы интерфейс не тормозил даже на тысячах процессов. На мощных ПК можно поднять этот порог, на слабых — понизить. В любом случае интерфейс не зависнет и не исчезнет, а если что-то пойдёт не так — о проблеме будет известно.
О параметре “Порог троттлинга”
Если процессов становится больше определённого количества (значение регулируется параметром “Порог троттлинга”), включается специальный режим с троттлингом: фильтрация и обновление списка происходят не чаще, чем раз в секунду, даже если вы быстро набираете текст — задержка реализована на системном уровне (через внешний механизм), поэтому интерфейс 1С никогда не фризится даже на тысячах процессов
“Порог троттлинга” — это ограничитель, после которого включается защита от частых обновлений таблицы процессов. При превышении порога поиск срабатывает не мгновенно, а с задержкой, чтобы 1С не тормозила при большом количестве строк.
Эта задержка реализуется также через PowerShell-скрипт. Он гарантирует задержу заданного количества времени, а затем возвращает управление в 1С. Параметр не влияет на точность поиска или полноту списка — только на плавность интерфейса и комфорт работы на слабых машинах.
Зачем это всё?
Для тех, кто:
- хочет понять, почему rphost жрёт все ядра, а 1cv8.exe всплывает из небытия;
- разбирает командные строки как археолог древние таблички;
- любит контроль и справедливость;
- хочет завершать процессы с удовольствием и смыслом.
P.S. Если бы 1С-процессы умели разговаривать, они бы жаловались на эту обработку… :)
P.P.S. Если есть пожелания по доработке — пишите, буду рад обратной связи.
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.21.128