0

Windowsサーバーで実行するバッチファイルを作成する際に助けを求めたいと思います。このファイルは、「スタック」して強制終了された後も残るプロセスを監視します。

具体的には、PsList コマンド http://technet.microsoft.com/en-us/sysinternals/bb896682.aspxの Elapsed Time 列でプロセスの「年齢」を確認できます。

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スクリプトなどを実行したいと思います)

4

2 に答える 2

1
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の著作権とバージョン情報を除外するためのもので、バージョン固有の可能性があります
  • ファイル名にスペースが含まれるexeファイルでは機能しません!
  • これには、smss、winlogon、svchostなどのシステムプロセスも一覧表示されるため、これらを強制終了しないでください(したがって、これをシステムとして実行しないでください。昇格した管理者として実行すると問題が発生する可能性があります)

CPU時間によるフィルタリングが許容できる場合は、単純な組み込みコマンドを使用できます。tasklist /FI "CPUTIME ge 04:00:00"

Windows Scripting HostまたはPowershellを使用してこの問題を解決することをお勧めします(WMIを使用してプロセスを一覧表示すると、実際のオブジェクトを取得でき、文字列を処理する必要がなくなります)

于 2010-07-23T09:17:49.097 に答える
1

だから私は実際にこれを自分で考え出しました.AutoItと追加のフィルターを使用して、各プロセスのコマンドライン引数を調べ、次に各プロセスの経過時間を調べ、古いものを強制終了する必要がありました.

ここに完全な投稿があります:

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

2 時間後に FMSCore プロセスを期限切れにするように Connect をセットアップしましたが、誰かがまだレコーディングに接続している場合、その人が切断するまで古いゾンビ FMSCore プロセスを保持します。

それが機能しないことがよくあります。古い FMSCore をクリーンアップするためのガベージ コレクションが整っていないように見えます。

そこで、動作する EXE にコンパイルできる単純な AutoIt スクリプトを作成しましたが、いくつかの依存関係があります…</p>

次の依存関係/コマンドがすべて配置されている必要があります。

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

使い方

  • スクリプトは pv.exe を使用して、「flvplayerapp」を含むコマンド ライン引数を持つすべての FMS コア プロセスを検索します (記録されたコースのみ)。
  • 返されたプロセス ID ごとに
  • pslist を使用して、プロセスの経過時間を含む詳細を一覧表示します
  • 正規表現の一致を使用して、「稼働時間」を見つけます</li>
  • 5 時間 (構成可能なパラメーター) を超える場合は、pskill を使用してプロセスを強制終了します。

そのため、これを 1 時間ごとにスケジュールされたタスクに設定すると、ガベージ コレクションが処理されます。

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

于 2010-07-30T21:05:37.953 に答える