У меня есть Bat-файл, работающий в фоне в Windows, который длится приблизительно десять минут. Теперь я хочу остановить его, в то время как это работает, но я не могу найти его имя в списке процессов в диспетчере задач. Таким образом, как я могу приблизиться к этому?Спасибо!
UPDATE1
Кажется трудным остановить рабочий процесс BAT в backgroud. И я решаю попытаться уничтожить каждый процесс, включенный файлом the Bat по имени, который может быть сверхуничтожен. Это приемлемо для меня, так как большинство процессов в моем Bat-файле часто не используется, такие как ping, tracert, netstat и т.д. Если у Вас есть какое-либо лучшее решение, сообщенное мне. Спасибо.
UPDATE2
Дерево процесса BAT
Процессы обычно запускаются в дереве как вид, я советовал бы запускать Microsoft / Проводник Процесса Sysinternals, Запускаться путем нажатия Show Process Tree
(1) опция, затем найдите свой процесс и щелкните правой кнопкой и выберите Kill Process Tree
(2) Это должно уничтожить и исходный файл и все, что он запустил.
Я записал приложение, которое могло бы помочь Вам, по крайней мере, если the Bat работает в окне CMD. Можно просмотреть окна приложения, которые выполняют и получают PID приложения, можно затем уничтожить его с моим приложением, можно также видеть все процессы, что это породило и уничтожает их также. Это - реальная простая программа, но эффективный для этого вида вещи. Можно также использовать его для разыскивания точно, откуда на the Bat HD файл работает, в случае, если Вы уже не знали это.
Можно изменить пакетный файл так, чтобы он использовал файл блокировки, чтобы продолжить работать путем вставки проверок между командами для существования файла. Чтобы мешать пакетному файлу выполниться, просто удалите файл блокировки.
Вот демонстрационный пакетный файл:
echo xx > "c:\temp\lockfile"
pause
if not exist "c:\temp\lockfile" goto exit
pause
del "c:\temp\lockfile"
:exit
Для сильного уничтожения процессов, которые могли бы выполняться в данный момент можно создать пакетный файл 'уничтожения', который будет содержать команды taskkill для всех задач, возможно запущенных от пакетного файла:
del "c:\temp\lockfile"
taskkill /im mytask1.exe
taskkill /im mytask2.exe
Найденный этим потоком форума:
http://www.gamedev.net/community/forums/topic.asp?topic_id=261694
Это предлагает использовать ShellExecuteEx (или CreateProcess), таким образом, можно получить дескриптор процесса, который затем может использоваться для уничтожения процесса.