|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.09.2015, 09:49 | #1 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
Как проверить, есть ли процесс с указаным PID
Здравствуйте.
Я знаю PID процесса, задача определить, жив ли он. Делаю это так: Код:
Как исправить проблему? Как определить есть ли процес с указаным PID? (Вариант с получение полного писка процессов не рассматриваю, так как есть много ресурсов) Спасибо |
18.09.2015, 11:08 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
Получить HANDLE процесса, потом ждать его завершения через WaitForSingleObject функцию.
|
18.09.2015, 11:18 | #3 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
бред, а если я проверяю сразу 20 процессов, мне создавать 20 доп потоков? Мне может нужно раз в час проверить жив ли процесс.
Т.е. мне нужно открыть процесс, если успех - процесс живой. Что я и делаю. Но я не понимаю почему после смерти процесса он всё равно считается живым. добавлю: 1. Создаю ПРОВЕРЯЕМЫЙ процесс, назовём a 2. Создаю 2 ПРОЕРЯЮЩИХ процесса, назовём b и c 3. В процессе b проверяю процесс a - живой 4. Завершаю процесс a 5. В процесса b проверяю процесс a - ЖИВОЙ 6. В процессе c проверяю процесс a - НЕ живой. т.е. получается что если оть раз проверял живой процесс, даже после завершения он будет определяться как живой Последний раз редактировалось Stilet; 18.09.2015 в 11:42. |
18.09.2015, 11:54 | #4 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
WaitForMultipleObjects не?
Цитата:
вы проверяете сущеествование процесса с указанным PID, это разное. процесс существует пока выполняется и пока имеет на себя незакрытые ссылки.(может у вас в другом месте хэндл висит?) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
18.09.2015, 13:14 | #5 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
Тогда раз в час вызывайте GetExitCodeProcess()
|
18.09.2015, 16:33 | #6 | |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
а разве CloseHandle(hProcess); недостаточно?
Цитата:
так работает, но я не понимаю почему мой код не работает. Последний раз редактировалось Stilet; 18.09.2015 в 21:47. |
|
18.09.2015, 17:50 | #7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
Вот здесь объяснение:
http://programmersforum.ru/showpost....31&postcount=4 |
18.09.2015, 18:39 | #8 | |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
Цитата:
Процесс я открываю только в одном месте и только кодом который я указал. После заверения процесса все проги типа ProcesExplorer и т.д. показывают что процесса больше нет. А мой софт всё равно говорит что он есть. Получается что после вызова OpenProcess и CloseHandle, по факту хендл не закрывается? ЧТо ещё требуется сделать чтобы коректно закончить работу с процессом? |
|
18.09.2015, 19:08 | #9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
Скорее всего ControlPID содержит номер другото процесса.
Мне трудно поверить, что OpenProcess откроет несуществующий процесс. Отладчик и вперед... Edit: О, сегодняшняя статья в тему: http://blogs.msdn.com/b/oldnewthing/.../10642343.aspx Последний раз редактировалось waleri; 18.09.2015 в 20:52. |
18.09.2015, 21:45 | #10 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
ControlPID точно содержит верный номер.
Как минимум потому что я добавил GetExitCodeProcess после получения хендла, и всё работает как надо. Да и проверить мою беду не так и сложно, 15-20 минут времени. Как воссоздать проблему я подробно описал в сообщении номер 3 |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Получить handle и пользователя, запустившего процесс, зная PID | Night_Devil | Win Api | 5 | 10.06.2012 13:16 |
Как проверить запущен ли процесс? | Chanterz | C# (си шарп) | 1 | 05.02.2012 00:53 |
Как программно проверить и отключить процесс Explorer ! | asked86 | Win Api | 10 | 17.12.2008 11:04 |
Как проверить, есть ли файл? | Dux | Общие вопросы Delphi | 3 | 02.04.2008 23:18 |