При администрировании сервера приложений 1С:Предприятие 8.3 можно столкнуться с ситуацией, когда в диспетчере задач или системном мониторе внезапно появляется несколько десятков однотипных процессов с маской имени v8_XXXX_XXX.exe, где вместо X указаны шестнадцатеричные символы. На первый взгляд такое поведение операционной системы часто принимают за вирусную атаку или внедрение вредоносного трояна в дистрибутив платформы. Однако проанализируем реальные механизмы работы платформы 1С и выясним истинную причину появления подобных процессов.
Рассмотрим, откуда берутся файлы с подобными именами. В платформе 1С:Предприятие встроен метод встроенного языка ПолучитьИмяВременногоФайла(). Если передать ему расширение exe, платформа генерирует путь к файлу во временной папке пользователя операционной системы (или во временном каталоге службы сервера 1С) по строгому шаблону:
v8_.1cv8.exe или рабочего процесса кластера rphost.exe), в контексте которого был выполнен вызов..exe.Таким образом, появление процессов с именами вида v8_XXXX_XXX.exe напрямую говорит о том, что прикладной код конфигурации, внешняя обработка или регламентное задание извлекает из двоичных данных (например, из макета конфигурации) исполняемый файл, сохраняет его во временный каталог с уникальным именем и запускает через метод ЗапуститьПриложение или через объекты операционной системы (такие как WScript.Shell).
Разберем основные причины, из-за которых эти исполняемые файлы не завершают работу, а продолжают висеть в памяти в огромных количествах:
ragent.exe, rmngr.exe, rphost.exe) и выполняемые ими фоновые/регламентные задания работают в изолированной нулевой сессии Windows, где графический интерфейс пользователя полностью заблокирован. Если вызываемая утилита пытается вывести диалоговое окно (например, предупреждение, запрос лицензии, окно ошибки или окно ввода параметров), процесс не может показать окно на экране и навсегда «зависает» в ожидании реакции пользователя..exe, запускаемых непосредственно из системных каталогов %TEMP%. В результате процесс «зависает» на этапе проверки.Выясним по шагам, какая именно функциональность или внешняя обработка порождает зависшие процессы:
1A4C из v8_1a4c_001.exe) в десятичную систему счисления с помощью стандартного калькулятора программиста. Полученное число — это точный идентификатор процесса (PID) rphost.exe или 1cv8.exe, из которого был инициирован запуск.v8_XXXX_XXX.exe. Откроем его свойства и посмотрим на поле Command Line (командная строка запуска) — в нем будут видны переданные аргументы, ключи и пути, что сразу укажет на конкретную прикладную задачу (например, утилита архивации, криптографическая утилита, конвертер файлов или драйвер торгового оборудования).C:\Windows\Temp или C:\Users\usr1cv8\AppData\Local\Temp). Скопируем зависший .exe-файл в отдельную папку и посмотрим его свойства (вкладка «Подробно»), чтобы определить разработчика, оригинальное имя файла и версию программы.ПолучитьИмяВременногоФайла("exe"), ПолучитьИмяВременногоФайла(".exe"), а также по методу ЗапуститьПриложение. Обратим особое внимание на код во внешних обработках и расширениях, подключенных к базе.Рассмотрим, как правильно организовать работу с внешними утилитами, чтобы исключить утечки процессов и зависание сервера.
1. Отказ от динамической распаковки бинарников во временные папки:
Не следует извлекать исполняемый файл из двоичных данных в папку Temp при каждом вызове. Рекомендуется установить необходимую утилиту стационарно в выделенный каталог на сервере (например, C:\Program Files\UtilityName\) с разграниченными правами доступа и обращаться к ней по постоянному пути. Это исключит постоянное создание файлов с уникальными именами и снизит подозрительность со стороны антивирусов.
2. Корректные параметры запуска в фоновых заданиях:
Если запуск сторонней консольной утилиты неизбежен, проанализируем правила его корректной настройки в коде 1С:
--silent, -batch, /q), исключающими любые графические окна и интерактивные подсказки.ЗапуститьПриложение.УдалитьФайлы в блоке Попытка ... Исключение.Посмотрим на пример корректного вызова внешнего приложения с ожиданием завершения:
КомандаЗапуска = Строка(ПутьКУтилите) + " --silent --input=""" + ПутьКВходномуФайлу + """";
КодВозврата = 0;
// Третий параметр (Истина) указывает на ожидание завершения работы запущенного процесса
ЗапуститьПриложение(КомандаЗапуска, , Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
ЗаписьЖурналаРегистрации("ВыполнениеВнешнейУтилиты", УровеньЖурналаРегистрации.Ошибка, , ,
"Процесс завершился с ошибкой. Код: " + Строка(КодВозврата));
КонецЕсли;
3. Использование штатных объектов платформы вместо внешних .exe:
Многие задачи, для которых ранее программисты использовали внешние консольные утилиты, в современных версиях платформы 1С:Предприятие 8.3 решаются встроенными средствами:
ЗаписьZipФайла и ЧтениеZipФайла.curl или wget используем объект HTTPСоединение и связанные с ним классы HTTPЗапрос и HTTPОтвет.МенеджерКриптографии.4. Настройка профилей безопасности кластера:
Для предотвращения неконтролируемого запуска исполняемых файлов на стороне сервера 1С рекомендуется включить профили безопасности в свойствах информационной базы. Профиль безопасности позволяет явно запретить запуск внешних программ операционной системы либо строго ограничить список разрешенных исполняемых файлов доверенными системными путями.