Windows XP を搭載した古いコンピューターがシステムのサーバーとして機能している状況があり、何か問題が発生したときにアラームを送信する可能性があります。しかし、私たちが使用しているこのサーバー プログラムは非常にバグが多く、特定の瞬間にアラームを気にしなくなることがあります。これらのアラームは積み重なり、プログラムが最終的に再起動されると、すべてが一度に送信されます。これにより、これらのアラームはほとんど役に立たなくなります。プログラムを再起動するまでに、システムに問題があることがすでにわかっているからです。
私が目指している解決策は、単純なバッチ ファイルを使用して、Windows タスク スケジューラが毎晩プログラムを強制終了し、再起動できるようにすることです。ただし、プログラムのプロセスは Windows プロセス csrss.exe の子プロセスであるサブプロセスとして実行されているため、プロセスを強制終了する方法が見つからないようです。
タスクマネージャーを開くと、プロセスを表示して強制終了できますが、コマンドtasklist
には親プロセスの csrss.exe しか表示されず、それを強制終了するには PID が必要taskkill
です。はい、子プロセスも強制終了tasklist
する追加のパラメーターがあります/t
が、子プロセスのみを強制終了し、Windows csrss.exe の実行に明らかに不可欠なままにする方法が必要です。
私の質問は次のとおりです。バッチファイルを使用して子プロセスのみを強制終了する方法を知っている人はいますか?
これはもちろん、このための特定のプログラムをコーディングして、バッチ ファイルでそのプログラムを使用することによって実行できますが、迅速な修正を望んでいます。
これまでのところ、私は持っています:
TASKLIST /FI "IMAGENAME eq program.exe" 2>NUL | FIND /I /N "program.exe">NUL
IF NOT %ERRORLEVEL%==0 GOTO :restart
TASKKILL /FI "IMAGENAME eq program.exe" /F /T
:restart
START /D "C:\path\" program.exe
編集:
別のプロセスの子プロセスであるため、プロセスのイメージ名がタスク マネージャーでインデントされていないことに気付きましたが、16 ビット プロセスであるためです (直感的です)。つまり、これは 16 ビット プロセスであり、問題はどのようにして PID を見つけて 16 ビット プロセスを強制終了するかということです。Tasklist
、私が述べたように、それは表示されておらず、どちらも表示されていませんpslist
。