gifts2017

Запуск процесса с ожиданием завершения дочерних первого уровня

Опубликовал Сергей Хоменко (VGHOST) в раздел Администрирование - Архивирование (backup)

Запускает указанный процесс с параметрами и ожидает завершения его и дочерних процессов 1 уровня.
Можно указать произвольный таймаут, по истечении которого ожидание прерывается.
Также можно заставить скрипт принудительно завершить родительский и дочерние процессы, которые не завершились сами к моменту наступления таймаута.

Скрипт пришлось родить для запуска баз по именам с помощью стартера платформы 1С 8.3.

Известная проблема состоит в том, что стартер (1cestart.exe) завершается раньше запущенного им дочернего процесса, что делает использование команды Start бессмысленым. Данный скрипт опрашивает список процессов по идентификатору родительского процесса PID средствами WMI с указанным интервалом, и завершается, когда ссылок на PID не остается.

Теперь можно забыть о прописывании версий и прочих индивидуальных настроек баз в скрипты, а указывать только файл списка баз (или сослаться на него из 1cv82\common\1CESCmn.cfg) и имя базы - все остальное стартер найдет в списке баз.

Область применения - пакетный запуск конфигуратора (тестирование, архивация, выгрузка/загрузка исходников для трехстороннего сравнения и прочей обработки).

 Разумеется, применение этого скрипта не ограничивается запуском 1С, единственное ограничение - дочерние процессы 2 и следующих уровней не просматриваюся. Допилить на этот случай не сложно, но это приведет к дополнительным запросам к WMI (количество уровней вложенности дерева процессов + 1), что приведет к дополнительным расходам ресурсов и повышению вероятности взятия в оборот недочерних процессов с совпадающими идентификаторами.

Запуск нужно производить при помощи "cscript //nologo ...", чтобы избежать появления диалоговых окон.


Версия 1.0.4, 2015-06-02.

Добавлен контроль времени создания дочерних процессов.
Вероятность попадания процессов с идентичным PID родителя в список ожидания завершения сведена почти к нулю (почти - потому что в некоторых случаях не удается точно определить время запуска и/или завершения корневого процесса).

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
WaitForProcessTree.vbs
.vbs 31,21Kb
02.06.15
6
.vbs 1.0.3 31,21Kb 6 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Николай ~ ~ (kuzyara) 06.03.15 04:28
2. Александр Киричков (GreenDragon) 06.03.15 09:37
(1) kuzyara, ога! Сам по тому скрипту настраивал архивирование, дополнив его сбросом сделанного архива на ftp(бухгалтеры просили для аудиторов такое устроить). Думаю, Powershell гораздо гибче и удобнее в таких вопросах
3. Сергей Хоменко (VGHOST) 06.03.15 11:23
(2) GreenDragon, Согласен, гибче и удобнее - если не считать размера интерпретатора и настройку инфраструктуры, чтобы оно вообще могло выполняться. В корпоративной полностью настроенной сети, когда вся автоматизация писана на PS, это выгодно, но не для точечного применения с многократной загрузкой интерпретатора из CMD-скриптов.
WSH многократно легче и совместим с любыми версиями Windows, актуальными на текущий момент. Да и данная конкретная задача таких мощностей не требует...
4. Александр Зубцов (iov) 08.03.15 01:15
не удалось запустить приложение код ошибки 8 (win 8.1)
5. Сергей Хоменко (VGHOST) 13.03.15 12:47
(4) iov, Под W8 не тестировал, только под W7/Srv2008.
Попробуй запустить с повышенными привилегиями ("Запуск от имени администратора") а также простую командную строку cmd.exe без параметров - вроде была такая ошибка при несуществующей рабочей папке (/W), либо проблема в самой командной строке.
Какие параметры передавал скрипту?
6. Александр Киричков (GreenDragon) 28.03.15 14:52
(3) VGHOST,
если не считать размера интерпретатора и настройку инфраструктуры

Это ты о чём вообще?

но не для точечного применения с многократной загрузкой интерпретатора из CMD-скриптов.

И зачем в принципе cmd, когда всё прекрасно пишется на PS?

с любыми версиями Windows, актуальными на текущий момент

Актуальными на данный момент можно считать только операционки, выпущенные после WinXP. Все они работают с PS (Хотя и WinXP тоже поддерживает PS)
7. Сергей Хоменко (VGHOST) 30.03.15 20:41
(6) GreenDragon, О времени запуска первого скрипта для начала - PS раскочегаривается медленнее жабы. Но это как раз мелочи.
А вот скажи, ты все скрипты свои подписываешь или демократию у себя в сети развел?
Инструмент действительно мощный, и чтобы ваять вредоносный код на нем семи пядей во лбу быть не надо...
Билли (или кто там теперь рулит) не зря по умолчанию поставил политику restricted.

У CMD своя ниша, у PS - своя. Там, где нужно подряд запустить несколько программ с почти статическими параметрами, раскочегаривать PS нет никакого смысла. Причем ниша последнего сильно наступает на владения компилируемых языков, и приблуды сложнее выложенного здесь скрипта я бы предпочел делать с использованием полноценного отладчика. Того гляди GUI на нем писать начнут, как на питоне и подобных...
CMD безусловно убогий и кривой, зато простой и быстрый. Замечательно, что MS родил наконец что-то не такое глючное и сравнимое по возможностям с интерпретаторами под Linux 30-летней выдержки (и даже слегка перестарался :)), но срочно переползать на него и переписывать имеющееся хозяйство нет никакого желания. Они бы начали делать его лет 15 назад вместе с ядром NT :(

Была бы у меня своя сеть я бы тоже озаботился доменными политиками, раздачей сертификатов и скриптами на PS, или лучше приличной библиотекой в бинариках, безо всяких прокладок-интерпретаторов.
Только вместо этого у меня в хозяйстве мелкие сервера, которые толком никто не админит, и покрупнее, админам которых не сильно озабочены стройностью инфраструктуры, когда за оптимизацию никто не платит, заморачиваться не хотят.
В такой ситуации вполне устраивают менее требовательные вещи, хоть и отладчика приличного (бесплатного) не найти, разве только ECMAScript + Eclipse...

Впрочем, это все демагогия и споры о вкусах.
Что я выложил, то выложил, не вижу смысла далее полемику разводить.
8. Александр Киричков (GreenDragon) 04.04.15 11:01
Спасибо, достойный и развёрнутый ответ.
Для больших сетей и периодически решаемых в них задач, прекрасно подходит PS. В твоём конкретном случае с маленькой сетью, действительно нет особой нужды заморачиваться. Про скорость... Ну, я тут не разруливаю скриптами посадки/взлёты самолётов или отправление поездов с атомной станции, так что задержка запуска на пару-тройку секунд не является критичным параметром для выбора среды.

Политики... По этому поводу можно заглянуть сюда. Батники, кстати, вполне себе успешно могут тоже дел наворотить, так что с точки зрения безопасности PS скрипты более контролируемы.

Для меня батники имеют только один плюс - большая часть эникейщиков сможет после меня разобраться и модифицировать его.

В общем, ок. Благодарю за уделённое на ответы время и приятный диалог!
9. Сергей Хоменко (VGHOST) 06.04.15 10:05
(8) GreenDragon, Взаимно.
И спасибо за ссылку - сделать скрипт для групповой подписи других скриптов интересная идея.
10. Бенджамин Спок (Spoke37) 02.06.15 11:21
Реализация для дочерних процессов 2го уровня не планируется?
11. Сергей Хоменко (VGHOST) 02.06.15 20:02
(10) Spoke37, Увы, только за отдельную плату.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа