2

У меня есть несколько процессов с одним и тем же именем (скажем, несколько процессов FIREFOX.exe). Затем пакетный скрипт открывает другой процесс firefox.exe и по истечении некоторого предопределенного времени должен завершить открытый процесс.

У меня было следующее решение для этого

start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -P "ABC" -no-remote
PING 127.0.0.1 -n 10 -w 1000 >NUL
for /F "TOKENS=1,2,*" %%a in ('tasklist /FI "IMAGENAME eq firefox.exe"') do set MyPID=%%b
taskkill /PID %MyPID% /T 

Это прекрасно работает, ЗА ИСКЛЮЧЕНИЕМ, если после 1-й команды открывается другой процесс с таким же именем (firefox.exe) (т. Е. Работает firefox), команда taskkill фактически убивает самый последний процесс вместо того, который был запущен

Итак, как мне убедиться, что скрипт убивает только процесс, который он начал, и ничего другого.

1 ответ1

1

Во всяком случае, я решил проблему сам.

На самом деле, решение над собой нуждается в небольшой настройке. Это все

start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -P "ABC" -no-remote
for /F "TOKENS=1,2,*" %%a in ('tasklist /FI "IMAGENAME eq firefox.exe"') do set MyPID=%%b    
PING 127.0.0.1 -n 10 -w 1000 >NUL
taskkill /PID %MyPID% /T 

Ранее происходило то, что я устанавливал% MyPID% после команды PING (что является просто временной задержкой). Таким образом, в этот период любой новый процесс (с тем же именем), который открылся, получил свой PID, зарегистрированный для taskkill. Я просто переместил команду сразу после команды открытия процесса, и теперь она работает.

Технически, хотя, если слишком много одних и тех же процессов открываются (скажем, в течение миллисекунд) несколькими сценариями, это может вызвать проблемы, а таскилл может убить неправильный процесс (возможно, кто-то может написать ответ об этом. Я не приму мой ответ на данный момент ... но будет ждать день или 2, что) :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .