|
Я в этом не шарю
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
|
|
Как завершить дочернее приложение если родительское было завершено?15.07.2015, 13:13. Показов 1394. Ответов 8
Метки нет (Все метки)
Ситуация такая.
Есть родительское приложение. Оно создаёт дочерний процесс, с которым общается через сокет. Иногда случается, что родительское приложение падает (проблемы разработки или просто сбои). Так вот нужно чтобы дочернее приложение завершалось автоматически, если родительское было завершено, но как такое проделать я не знаю. Просто сигналом из сокета об отсутствии соединеия ограничиться не получится, родительское может падать в следствии ошибки и тогда дочернее останется висеть в памяти без действий.
0
|
|
| 15.07.2015, 13:13 | |
|
Ответы с готовыми решениями:
8
Как блокировать родительское окно, пока открыто дочернее? Как догрузить до конца вначале дочернее окно, а потом родительское Распределить задачи по процессорам так, чтобы выполнение всех задач было завершено в кратчайший срок |
|
2 / 2 / 3
Регистрация: 07.10.2013
Сообщений: 48
|
|
| 16.07.2015, 14:02 | |
|
Я далеко не специалист, но решил бы так:
1. при создании дочернего процесса получаем его process id(pid) и убиваем дочерний процесс при завершении или 2. в обработчике сокета дочернего реагировал бы на специальный символ, при котором процесс самоубивается (или вызывается garbage collector принудительно). Насчет ошибок : я бы заключил все в блоки try...catch и при возникновении делал бы то, что описал вверху.
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
| 16.07.2015, 15:18 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 17.07.2015, 12:04 | ||
|
но думаю, что такой сценарий может прокатить: родитель при создании ребенка может сообщить ему свой хэндл. ребенок фиксит, что родитель долго не отвечает, пробивает хэндл. через него он узнает статус родителя. и если процесс - мертв, то самоликвидируется.
0
|
||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||
| 17.07.2015, 13:24 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 17.07.2015, 14:05 | ||
|
и теперь пока он его не отпустит, система никому такой же не отдаст.
0
|
||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|||
| 17.07.2015, 15:07 | |||
|
Я все еще не пойму задумки.
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 17.07.2015, 17:27 | ||
|
при создании процесса, в системе создается некий объект ядра. когда процесс помирает, этот объект ядра ещё какое то время существует. чуть позже, система его подчищает за ненадобностью. если у вашего процесса достаточно прав, то вы можете заполучить к себе хэндл чужого процесса. например, с помощью функции ::OpenProcess в этом случае получится, что на один и тот же объект ядра ссылаются два открытых хэндла, из двух разных процессов. и теперь, пока оба эти хэндла не будут закрыты, объект ядра будет существовать, даже если породивший его родительский процесс подохнет. тобишь, родительского процесса уже давно нет в живых. но объект ядра ассоциированный с ним остается жить, пока существует хотя бы один открытый хэндл, который на него ссылается. по этому хэндлу, ребенок сможет пробить информацию о состоянии объекта ядра. и узнать: жив ли ещё родительский процесс, или канул в лету.
1
|
||
|
Ушел с форума
|
||||
| 17.07.2015, 18:06 | ||||
|
Создаете job-объект, задаете для него параметры через SetInformationJobObject + JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE, далее помещаете дочерний процесс в job. Хэндл job-объекта закрывать не нужно. Когда родительский процесс завершится, вместе с ним система прибъет и все дочерние, являющиеся частью job-а. Еще до создания дочернего процесса родительский может открыть себя с параметрами bInheritHandle = TRUE в SECURITY_ATTRIBUTES и тогда дочерний процесс автоматически унаследует хэндл родителя (при условии, что CreateProcess вызывается с bInheritHandles = TRUE). А пока существует хотя бы один хэндл процесса, система не выдаст его ID кому-то другому: PROCESS_INFORMATION structure https://msdn.microsoft.com/en-... 85%29.aspx
3
|
||||
| 17.07.2015, 18:06 | |
|
Помогаю со студенческими работами здесь
9
Как понять, что дочернее приложение - снято? Вывести позиц Коды символа нажатой клавиши, если не было взаимодействия с мышью, а если было - то не выводить Приложение падает, если было запущено при автозапуске системы Сообщение "Восстановление системы не было успешно завершено" Как сделать прозрачным окно, если оно - дочернее Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|