![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Завершение дерева процессов [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