У меня есть два процесса (foo.cmd и bar.cmd на Windows7 prof), которые часто проверяются, если другой процесс все еще запущен. Поскольку каждый процесс знает PID другого процесса в переменной %FPID%
, я использовал, чтобы проверить, если другой процесс все еще работает как этотКак найти процесс windows по идентификатору процесса на командной строке
FOR /F "tokens=1,*" %%a in ('tasklist /FI "PID eq %FPID%" /NH ^| find /C "%FPID%"') do set COUNTP=%%a
Если %COUNTP%
теперь больше, чем 0, то другой процесс все еще работает ,
Но время от времени %COUNTP%
было равно 0, даже если другой процесс все еще работал (он все еще записывается в лог-файлы). Через секунду его можно было найти снова.
- Какие обстоятельства могут привести к тому, что не будет найден текущий процесс по его идентификатору, как в случае с вышеприведенным утверждением?
- Есть ли лучший/лучший/более быстрый способ проверить, активен ли процесс для определенного ПИД-регулятора (в окнах)?
Можете ли вы объяснить, как эти партии знают друг друга, вы использовали grep 'WMIC PROCESS' раньше в скрипте? Нам нужно будет воспроизвести это в WMI-наблюдателе, чтобы он работал так, как вы хотите. Или вы просите о помощи, как это сделать, и я должен объяснить это? –
Спасибо за ваш ответ. Я получаю PID каждого процесса, как здесь [http://serverfault.com/questions/126502], и записываю их в файлы (foo.dat и bar.dat). Теперь они могут просто прочитать из файла и сохранить содержимое в переменной '% FPID%' like 'set/p FPID = <" C: \ tmp \ foo.dat "'. Это работает очень хорошо, и обычно я могу идентифицировать другой текущий процесс с помощью этого идентификатора каждую минуту. всего через ~ 250-й раз я не могу найти другой процесс - почему он может быть невидим для команды 'tasklist/FI 'PID eq% FPID%"/N' – Preexo
Причина, вероятно, в том, что PID ошибочен или процесс не работает. Возможно, ваш сторожевой процесс перезапустил его, и именно поэтому он был найден. Мы будем гадать, не увидев ваш код. – foxidrive