Skip to content

Commit 1d72c1f

Browse files
authored
feat: Наблюдение за состоянием родительского процесса (#13)
1 parent 85636ce commit 1d72c1f

File tree

3 files changed

+77
-2
lines changed

3 files changed

+77
-2
lines changed

src/cmd/Классы/КомандаЗапустить.os

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,38 @@
11
// BSLLS:UsingHardcodeNetworkAddress-off
22

3-
&Опция(Имя = "h host", Описание = "Имя хоста / IP адрес сервиса")
3+
&Опция(
4+
Имя = "h host",
5+
Описание = "Имя хоста / IP адрес сервиса"
6+
)
47
&ТСтрока
58
&ПоУмолчанию("127.0.0.1")
69
Перем _Хост; // Строка
710

8-
&Опция(Имя = "p port", Описание = "Порт сервиса")
11+
&Опция(
12+
Имя = "p port",
13+
Описание = "Порт сервиса"
14+
)
915
&ТЧисло
1016
&ПоУмолчанию(3333)
1117
Перем _Порт; // Число
1218

19+
&Опция(
20+
Имя = "parrent-pid",
21+
Описание = "PID родительского процесса"
22+
)
23+
&ТЧисло
24+
&ПоУмолчанию(0)
25+
Перем _ИдентификаторРодительскогоПроцесса; // Число
26+
1327
&Пластилин("Настройки")
1428
Перем _НастройкиВебСервера; // НастройкиВебСервера - см. winow
1529

1630
&Пластилин("ЗапускательВебПриложения")
1731
Перем _ЗапускательВебПриложения; // ЗапускательВебПриложения - см. winow
1832

33+
&Пластилин("КонтроллерРодительскогоПроцесса")
34+
Перем _КонтроллерРодительскогоПроцесса; // КонтроллерРодительскогоПроцесса
35+
1936
&КомандаПриложения(Имя = "run", Описание = "Запуск сервиса")
2037
Процедура ПриСозданииОбъекта()
2138
КонецПроцедуры
@@ -31,6 +48,10 @@
3148
_НастройкиВебСервера.ЗадержкаПередЧтениемСокета = 400;
3249
КонецЕсли;
3350

51+
Если _ИдентификаторРодительскогоПроцесса > 0 Тогда
52+
_КонтроллерРодительскогоПроцесса.НачатьНаблюдение(_ИдентификаторРодительскогоПроцесса);
53+
КонецЕсли;
54+
3455
_ЗапускательВебПриложения.Запустить();
3556

3657
КонецПроцедуры
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
Перем _ОжиданиеМеждуПроверками; // Число
2+
Перем _ФоновоеЗадание; // ФоновоеЗадание, Неопределено
3+
4+
&Желудь
5+
Процедура ПриСозданииОбъекта()
6+
_ОжиданиеМеждуПроверками = 5000;
7+
КонецПроцедуры
8+
9+
#Область ПрограммныйИнтерфейс
10+
11+
// Запускает фоновое наблюдение за процессом с указанным идентификатором.
12+
// Если процесс завершается, текущий процесс также будет автоматически завершен.
13+
//
14+
// Параметры:
15+
// PID - Число - Идентификатор процесса, за которым необходимо наблюдать
16+
Процедура НачатьНаблюдение(PID) Экспорт
17+
18+
Если Не _ФоновоеЗадание = Неопределено
19+
И _ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
20+
ВызватьИсключение "Наблюдение за родительским процессом уже запущено";
21+
КонецЕсли;
22+
23+
ПараметрыМетода = Новый Массив();
24+
ПараметрыМетода.Добавить(PID);
25+
26+
_ФоновоеЗадание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ПериодическаяПроверкаПроцесса", ПараметрыМетода);
27+
28+
КонецПроцедуры
29+
30+
#КонецОбласти
31+
32+
#Область СлужебныеПроцедурыИФункции
33+
34+
Процедура ПериодическаяПроверкаПроцесса(PID) Экспорт
35+
36+
Пока Истина Цикл
37+
ЗавершитьЕслиПроцессОтсутствует(PID);
38+
Приостановить(_ОжиданиеМеждуПроверками);
39+
КонецЦикла;
40+
41+
КонецПроцедуры
42+
43+
Процедура ЗавершитьЕслиПроцессОтсутствует(PID)
44+
45+
Процесс = НайтиПроцессПоИдентификатору(PID);
46+
Если Процесс = Неопределено Тогда
47+
ТекущийПроцесс().Завершить();
48+
КонецЕсли;
49+
50+
КонецПроцедуры
51+
52+
#КонецОбласти

src/core/Классы/HttpBin.os

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
СтрокаКоманды.Добавить(_ИмяХоста);
3636
СтрокаКоманды.Добавить("--port");
3737
СтрокаКоманды.Добавить(Формат(_Порт, "ЧГ="));
38+
СтрокаКоманды.Добавить("--parrent-pid");
39+
СтрокаКоманды.Добавить(Формат(ТекущийПроцесс().Идентификатор, "ЧГ="));
3840
СтрокаКоманды = СтрСоединить(СтрокаКоманды, " ");
3941

4042
_Процесс = СоздатьПроцесс(СтрокаКоманды, РабочийКаталог, , , , ПеременныеСреды());

0 commit comments

Comments
 (0)