2010-03-09 2 views
0

Я хочу создать приложение на C или C++, которое должно отслеживать некоторые конкретные процессы. Как я могу сделать это возможным в C?Процессы мониторинга ОС Windows с использованием языка C

+0

Просьба предоставить более подробную информацию. Что конкретно вы хотите контролировать? – SLaks

+0

Уточните, что именно вы подразумеваете под «монитором»? –

+0

У меня есть свои собственные процессы, которые я должен начинать и останавливать в коротком контроле процесса, чтобы он мог передавать информацию о том, какой процесс находится в рабочем состоянии. Извините за мой английский. – Siddiqui

ответ

2

Вы сказали, что у вас есть tomaonitor «некоторые специфические процессы». Если ваше приложение запустило процессы, вы можете извлечь обработчики процессов из структуры PROCESS_INFORMATION (поле hProcess), которое вы передали функции CreateProcess. Если процесс, который вы хотите отслеживать, был запущен каким-то другим способом, вам нужен идентификатор процесса (PID) и использовать его в качестве третьего аргумента OpenProcess для получения дескриптора. Таким образом, вы можете использовать функции WaitForSingleObject или WaitForMultipleObjects, чтобы дождаться завершения процесса. При желании вы можете получить код завершения процесса с помощью функции GetExitCodeProcess. Существуют и другие способы, с помощью которых приложение может запустить новый процесс (например, библиотечной функцией _system()), но я настоятельно рекомендую использовать CreateProcess непосредственно в вашем коде, поскольку вы можете полностью контролировать поведение дочернего процесса (например, вы можно выбрать приоритет, передать дескрипторы stdin/stdout/stderr, определить характеристики окна запуска ...).

Предлагаемый пример: http://msdn.microsoft.com/en-us/library/ms682512%28VS.85%29.aspx

0

Прежде чем написать свое мнение, посмотрели ли Вы на Process Monitor v2.8?

Process Monitor является усовершенствованным инструментом мониторинга для Windows, который показывает файловой системы в режиме реального времени, реестра и процессов/потоков деятельности. Он сочетает в себе функции два устаревших Sysinternals утилиты, Filemon и Regmon, и добавляет обширный список усовершенствований, включая богатый и неразрушающей фильтрации, свойств всеобъемлющих событий таких сессии идентификаторы и имена пользователей, достоверную информацию процесса, полная резьба стопки со встроенной поддержкой символов для каждой операции, одновременная записьв файл и многое другое.

1

Вы начинаете процесс в Windows с CreateProcess() function. Он возвращает HANDLE для процесса в PROCESS_INFORMATION.hProcess. Этот дескриптор будет сигнализироваться, когда процесс завершится, что позволит вам отслеживать его срок службы. Для этого используйте WaitForSingleObject() или WaitForMultipleObjects(). Там пример кода доступны here...

+0

, или если кто-то еще начал процесс, вы можете использовать OpenProcess, чтобы превратить PID в РУЧКУ в процесс. Обязательно запросите доступ к SYNCHRONIZE, если вы хотите дождаться его. –

Смежные вопросы