Справка по пакетному файлу, необходимая для PsList / PsKill, когда процесс превышает определенный возраст (прошедшее время) - PullRequest
0 голосов
/ 23 июля 2010

Я хотел бы попросить некоторую помощь в создании пакетного файла для запуска на сервере Windows, который будет отслеживать процессы, которые иногда "зависают" и задерживаются после их уничтожения.

В частности, я могу увидеть «возраст» процесса в столбце «Истекшее время» команды PsList. http://technet.microsoft.com/en-us/sysinternals/bb896682.aspx

Name                Pid Pri Thd  Hnd   Priv        CPU Time    Elapsed Time
FMSCore            4908   8 146  892 750720     0:01:46.221     4:02:15.907
FMSCore            4780   8 144  943 853060     0:00:42.510     4:02:15.348
FMSCore            3532   8 146  878 553784     0:01:30.262     2:04:56.969
FMSCore            5384   8 147  753  45484     0:00:03.198     0:05:11.267
FMSCore            9548   8 133  608  17408     0:00:00.592     0:00:34.298

Следующий шаг - я хочу уничтожить только процессы старше 4 часов. Поэтому я считаю, что нам нужно будет проанализировать результаты моей команды PsList, извлечь последний столбец, проанализировать по часам, и если мы обнаружим, что он «достаточно старый», мы проанализируем его PID и уничтожим его.

Если бы мы говорили о bash или каком-либо другом языке сценариев, думаю, я бы мог это понять, но для пакетного сценария я не знаю.

Рекомендации

(примечание: я бы хотел запустить скрипт autoit или что-то еще, если нужно)

Ответы [ 2 ]

1 голос
/ 31 июля 2010

Так что я на самом деле понял это сам - пришлось использовать AutoIt и дополнительный фильтр, чтобы посмотреть аргументы командной строки для каждого процесса, а затем посмотреть на истекшее время каждого процесса, а затем убить старые.

Вот полный пост:

http://zeroasterisk.com/2010/07/23/adobe-connect-fmscore-process-killer/

Мы настроили Connect, чтобы завершить процессы FMSCore через 2 часа, но если кто-то все еще подключен к записи, он сохранитстарый зомби-процесс FMSCore до тех пор, пока этот человек не отключится.

Часто случается, что это не работает - и, казалось бы, не существует сборщика мусора для очистки старого FMSCore.

Итак, мы создали простойСкрипт AutoIt, который можно скомпилировать в EXE-файл, который работает, но имеет некоторые зависимости…

Должны быть все следующие зависимости / команды:

  • c: \ Windows \ system32\ pv.exe
  • c: \ Windows \ system32 \ pslist.exe
  • c: \ Windows \ system32 \ pskill.exe

Как этоработы

  • скрипт использует pv.exe для поиска всех процессов ядра FMS, имеющих аргумент командной строки, включающий flvplayerapp (только для записанных курсов)
  • для каждого из возвращенных идентификаторов процессов
  • он использует pslist для отображения сведений, которые включают возраст процесса
  • он использует совпадение с регулярным выражением, чтобы найти «часы, в которых он работает»
  • , если он дольше 5 часов (настраиваемый параметр)он использует pskill, чтобы убить процесс.

Итак, мы настроили это на ежечасное запланированное задание, и он обрабатывает сборку мусора для нас.

http://zeroasterisk.com/blog/wp-content/uploads/2010/07/fmscore-killer-source.au3_.txt

1 голос
/ 23 июля 2010
setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
FOR /F "tokens=2,10* skip=8 delims=: " %%A IN ('pslist') DO (
    if %%B GEQ 4 echo should kill pid %%A, elapsedhrs=%%B
)

Обратите внимание, что

  • skip = 8 - отфильтровать информацию об авторских правах и версии pslist, возможно, зависит от версии
  • Не будет работать с исполняемыми файлами с пробелами в имени файла!
  • В этом списке также будут перечислены системные процессы, такие как smss, winlogon, svchost и т. Д., И вам не следует их уничтожать (поэтому не запускайте это как систему, также могут возникнуть проблемы при запуске с повышенными правами администратора)

Если фильтрация по времени процессора приемлема, можно использовать простую встроенную команду: tasklist /FI "CPUTIME ge 04:00:00"

Вероятно, лучше решить эту проблему с помощью Windows Scripting Host или Powershell (составьте список процессов с WMI, таким образом вы получите реальные объекты и вам не придется иметь дело со строками)

...