| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Список child процессов |
| Автор: Purple_Light 8.8.2008, 12:56 |
| Всем привет! Вижу, что тема списка процессов уже поднималась, но у меня есть конкретная проблемма. Есть процесс в системе, этот процесс может порождать детей. Перед тем как убить родительский процесс, необходимо пройтись по всем детям, которых он создал и завершить их. Вопрос как получить списов детей? Поискал на форуме и нашел, только недокументированную функцию ZwQuerySystemInformation, но как написано на MSDN она может меняться от версии к версии, что не есть хорошо Может кто-нить поделится другим способом, если он существует. З.Ы.: Система Windows XP, Windows 2000, Windows 200* Server, Windows Vista |
| Автор: Rrader 8.8.2008, 17:17 | ||
Могу посоветовать посмотреть в сторону WMI. Там есть класс Win32_Process. Его экземпляры - все процессы в системе. Что там есть интересного? Поле ParentProcessId ,в котором хранится ID породившего процесса (подобно th32ParentProcessID в ToolHelp). Т.е. проходимся по всем процессам, и если их ParentProcessId совпадает с требуемым - значит, дочерние. Их и закрываем.
Может есть способ и лучше. |
| Автор: Rififi 8.8.2008, 17:30 |
| http://www.alexfedotov.com/articles/killproc.asp |
| Автор: Rrader 11.8.2008, 15:43 |
| Riply, я не глядел в MSDN. |
| Автор: Purple_Light 1.9.2008, 14:53 |
| Спасибо за ответы. Rififi в этой статье, как раз приведен пример с недокументированной функцией. Проблемма оказалась немного сложнее. Например, если рассмотреть случай, когда пользователь (который именно и создает дочернии процессы) запустит приложение запускающее само себя рекурсивно. Получится, к тому времени как программа получит слепок процессов системы, в системе появятся новые процессы (рекурсивно запущенная программа). Соответственно раз ID процессов не попали в слепок (snapshot) приложение их не убъет. Вообщем алгортм придумать, так и не удалось. Пришлось переписывать приложение, отслеживать запускаемые процессы и объединять их в группы. http://msdn.microsoft.com/en-us/library/ms684161(VS.85).aspx |