Можно ли как то сделать пинг процесса ? Определить, что он завис.

gera3323
Дата: 07.11.2014 12:11:55
Можно только теорию или список функция, или готовое решение.
Dimitry Sibiryakov
Дата: 07.11.2014 12:58:47

Windows для этого использует SendMessageTimeout().

Posted via ActualForum NNTP Server 1.5

gera3323
Дата: 07.11.2014 13:25:14
Dimitry Sibiryakov
Windows для этого использует SendMessageTimeout().


а как hwnd получить по id процесса ?
MasterZiv
Дата: 07.11.2014 13:32:58
gera3323
Dimitry Sibiryakov
Windows для этого использует SendMessageTimeout().


а как hwnd получить по id процесса ?


Например, FindWindow.

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

Работоспособность абстрактного процесса нельза вообще никак оценить.
Dimitry Sibiryakov
Дата: 07.11.2014 13:35:33

gera3323
а как hwnd получить по id процесса ?

EnumWindows() + GetWindowProcessThreadId().

Posted via ActualForum NNTP Server 1.5

mayton
Дата: 07.11.2014 17:07:51
gera3323, имеется в виду процесс-приложение в Win32 (Wndproc) циклом?
White Owl
Дата: 07.11.2014 19:06:47
gera3323
Можно только теорию или список функция, или готовое решение.
В общем случае: нельзя.

Можно "в главном цикле" процесса предусмотреть функцию проверки "а не пингуют ли меня?" и отвечать соответственно.
Можно сделать функцию которая периодически будет кидать наружу что-либо. Либо в лог писать "я еще живой", либо кидать udp пакет на предопределенный порт и если там есть монитор, то он будет подхватывать эту посылку и сообщать юзеру что главный процесс еще не завис.
Главный секрет в том чтобы процесс не замыкался в себе.

Без подобной подготовки определить что процесс завис можно пожалуй только опосредованно - если в течении некоего таймаута процесс не обращался ни к одной функции ОС, то можно предположить что что-то там произошло нехорошее. Но в то-же время процесс может и просто сидеть считать что-нибудь большое типа перемножения матриц...

SendMessageTimeout() это как раз пример "а не пингуют ли меня?". Эта функция кладет в очередь процесса сообщение и ждет пока процесс прочитает это сообщение. Если прочитал, значит главный цикл процесса (который в WndProc) еще работает.
Но и соответственно если у процесса нету WndProc - эта функция становится бесполезной.
Изопропил
Дата: 07.11.2014 21:32:30
gera3323
Можно только теорию или список функция, или готовое решение.

процесс "свой" (в котором что либо специфическое можно встроить ) или сторонний?