Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Завершение дерева процессов [D6, Win2k, WinXP]


lmatveev ©   (2004-02-26 20:03:00) 

Как реализовать функцию "Завершить дерево процессов" (которая есть в диспетчере задач Win2000 и XP)?
Задача завершить процессы, которые порождаются моим процессом. Но мне надо завершить не только их, а и те, которые из них породились.
Если кто знает как это сделать, то интересно было бы также узнать об аналогичных возможностях (или их отстутствии) в других ОС.


DeadMeat   (2004-02-28 14:06:00) [1]

В принципе, можно по таймеру проверять список процессов. При появлении нового, смотреть PID его родителя, если он известен (т.к. Есть хэндлы процессов, которые я запустил) то занести PID этого дитя в этот-же список. А потом убивать всех поочерёдности. Естественно, если какой-либо процесс исчез, то и его PID тоже надо убрать из списка.
Короче попробуй. Может получиться.


lmatveev   (2004-02-27 19:05:00) [2]


> DeadMeat ©   (27.02.04 18:27) [10]

Никак. У меня задача такая: Есть хэндлы процессов, которые я запустил. В определенный момент надо прибить то, что я запускал и то, что запускалось из тех процессов, которые я запускал. Если какие-нибудь из связующих процессов пристрялятся раньше - значит так тому и быть. Это, естественно, никак по другому не сделать


DeadMeat   (2004-02-27 18:27:00) [3]

А если у тебя выстроиться большое дерево, процессов так на 8-восемь и более и их родительский процесс закроется... Тогда как ты закроешь остальные...??


lmatveev   (2004-02-27 17:36:00) [4]


> Eagle-XK ©   (27.02.04 16:35) [8]

Точно. Уже пробовал...

> Cobalt ©   (27.02.04 11:12) [5]


> И останется он (потомок во втором (или более) колене) болтаться
> неприкаянным.

И пусть болтается. Такие случаи я рассматривать не буду.


Eagle-XK   (2004-02-27 16:35:00) [5]

А что будет, если завершить не дерево, а просто сам небоходимый процесс? Так точно не покатит, ась?


Cobalt   (2004-02-27 11:46:00) [6]

Извиняюсь, надо было слово чёткойвыделить.


Игорь Шевченко   (2004-02-27 11:44:00) [7]

Cobalt ©   (27.02.04 11:12)


> В виндах нет чёткой иерархии процессов.


Достаточно запустить Process Explorer от SysInternals и посмотреть на эту иерархию.


Cobalt   (2004-02-27 11:12:00) [8]

В виндах нет чёткой иерархии процессов.
Что ты будешь делать, если один из твоих потомков создаст свой потомок, а сам заверщится?
Связь между поколениями прервётся :(
И останется он (потомок во втором (или более) колене) болтаться неприкаянным.


lmatveev   (2004-02-26 22:43:00) [9]


> Не совсем. Только отсеять те, которые не являются "детями"
> нужного тебе "родителя".

Так в том то и дело, что "дети" нужного мне "родителя" тоже могут порождать процессы. Соответственно, мне сначала надо выстроить их иерархию, потом выкинуть те, которые вообще ко мне отношения не имеют, а уж потом прибивать снизу вверх...
И еще ведь нет гарантии, что пока я обрабатываю полученный список и пристреливую процессы из него, не создастся еще несколько новых процессов, которых у меня в списке не будет...


VMcL   (2004-02-26 22:30:00) [10]

>>А попроще никак нельзя?

AFAIK, нет.

>адо получить список ВСЕХ процессов в системе, потом понять кто от кого порожден

Не совсем. Только отсеять те, которые не являются "детями" нужного тебе "родителя".


lmatveev   (2004-02-26 21:55:00) [11]

Т.е. если я правильно понял, надо получить список ВСЕХ процессов в системе, потом понять кто от кого порожден и в соответствующем порядке их прибивать? А попроще никак нельзя?


VMcL   (2004-02-26 21:27:00) [12]

TlHelp32.pas: TProcessEntry32.th32ParentProcessID


Наверх

Титульная страница Поиск, карта сайта Написать письмо