Пастух для процессов

Тема в разделе "WASM.WIN32", создана пользователем iamlamer, 19 янв 2006.

  1. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    Некий процесс должен висеть в фоне, но криво написан и периодически виснет или вылетает. Нужен "пастух", который следил бы за ним, тыцал бы на капу "ОК" и перезапускал бы лентяя. Это несложно сделать самому, и почти уже готово, но:

    1) Как догадаться, что процесс не вылетел, а повис?

    2) Кстати, может быть я напрасно трачу время и есть готовые "пастухи" (KillBusy не предлагать) ?
     
  2. Guest

    Guest Guest

    Публикаций:
    0
    Синхронизируй с помощью событий
     
  3. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    Зависший процесс не мой. Это какой-та чужая фоновая хрень, которая проверяет почту, роется в базах данных и т.п. Моя задача - чтобы когда этот гад вылетел, запустить его вновь автоматицки.
     
  4. Guest

    Guest Guest

    Публикаций:
    0


    Process32First+Process32Next, если не присутствует в списке процессов - запускай
     
  5. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    Это понятно и уже сделано, и уже работает. Осталось отследить, когда он завис.
     
  6. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290


    Проще будет повесить калбек ... через PsSetCreateProcessNotifyRoutine.

    В винде есть функция проверки отзывчивости процесса. Но можна и по капшену окна мониторить ...



    [add]



    Вспомнил - IsHungAppWindow.
     
  7. Android

    Android New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    183
    Адрес:
    Ukraine
    Поток следит за завершением процесса и запускает его в случае ошибки

    1. получаешь описатель процесса hProcess=OpenProcess,SYNCHRONIZE,...

    2. Ждешь когда он завершится WaitForSingleObject,hProcess,-1, когда процесс завершается процедура WaitForSingleObject возвращает управление

    3. Закрываешь описатель CloseHandle,hProcess

    4. Запускаешь процесс снова



    или надо как-то поставить обработчик исключений вместо стандартного виндосовского
     
  8. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    могу предложить изврат. Если процесс имеет окно, имеет и оконнную процедуру. Инжектни в начало этой процедуры код типа jmp xxxxx на какойи нить свой кусок кода в данном процессе, который там к примеру флаг периодически выставляет и сбрасывает или время устанавливает последнего вызоа оконной функции. Таким образом будешь знать, обрабатывает ли процесс оконные сообщения или нет. Насколько мне известно, система отслеживает зависания гуишных процессов посылкой сообщения типа Wm_quit и затем проверяет через промежуток времени, не исчез ли процесс, если не исчез, то вызывается TerminateProcess, значит гуишный поток окна процесса, которому передали сообщение не обрабатывает сообщения.
     
  9. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    CARDINAL

    А зачем эти все движения телом ? Если можно дёрнуть IsHungAppWindow и винда всё сама зделает ?))
     
  10. n2k

    n2k kris kaspersky

    Публикаций:
    0
    Регистрация:
    22 янв 2005
    Сообщения:
    102
    Адрес:
    Russia
    ага, только она есть лишь начиная с w2k

    не проще ли послать WM_GETTEXT или что-то в этом роде?
     
  11. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    n2k

    об этом я тоже думал, может я чего не знаю, но, где гарантии что данный обработчик сообщения есть в проге?
     
  12. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    я заставлял все окна реагировать примерно так:

    SendMessage, HWND_BROADCAST, WM_SYSCOMMAND, -123456789, 0



    реагируют все.
     
  13. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    Ну тогда чем этот метод не решение проблемы ?)
     
  14. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Можно также включить авто завершение зависших приложений, там даже интервал времени можно задать.
     
  15. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    Well done. Пастух получился примитивный, но эффективный, что от него и требовалось. Всем спасибо за обсуждение и полезные советы.