8

У меня есть файл BAT, работающий в фоновом режиме в Windows, который длится около десяти минут. Теперь я хочу остановить его во время работы, но не могу найти его имя в списке процессов в диспетчере задач. Так как я могу подойти к этому? Спасибо!

Update1

Кажется, трудно остановить запущенный процесс BAT в backgroud.И я решил попытаться уничтожить каждый процесс, связанный с файлом BAT по имени, что может быть перебито.Это приемлемо для меня, так как большинство процессов в моем BAT-файле используются не часто, например, ping, tracert, netstat и т.д. Если у вас есть лучшее решение, пожалуйста, дайте мне знать.Благодарю.

UPDATE2

Дерево процессов BAT

альтернативный текст

7 ответов7

10

Процессы обычно запускаются в виде дерева, как в моде. Я бы посоветовал запустить Microsoft / Sysinternals Process Explorer. Начните с выбора опции Show Process Tree (1), затем найдите свой процесс, щелкните правой кнопкой мыши и выберите « Kill Process Tree (2). убить и оригинальный файл и все, что он запустил.

альтернативный текст

5

Вы можете изменить командный файл так, чтобы он продолжал работать, используя блокировочный файл, вставляя проверки между командами на наличие файла. Чтобы остановить выполнение командного файла, просто удалите файл блокировки.

Вот демонстрационный пакетный файл:

echo xx > "c:\temp\lockfile"
pause
if not exist "c:\temp\lockfile" goto  exit
pause
del "c:\temp\lockfile"
:exit

Для насильственного уничтожения процессов, которые могут выполняться в данный момент, вы можете создать пакетный файл kill, который будет содержать команды taskkill для всех задач, которые могут быть запущены из пакетного файла:

del "c:\temp\lockfile"
taskkill /im mytask1.exe
taskkill /im mytask2.exe
1

BAT обычно просто запускает экземпляр CMD.exe. В зависимости от того, что делает ваш скрипт, он также запускает другие процессы.

1

Я написал приложение, которое может помочь вам, по крайней мере, если BAT работает в окне CMD. Вы можете просмотреть запущенные окна приложения и получить PID приложения, затем убить его с помощью моего приложения, вы также можете увидеть все процессы, которые оно породило, и уничтожить их тоже. Это действительно простая программа, но эффективная для такого рода вещей. Вы также можете использовать его, чтобы отследить, где именно на вашем HD запускается BAT-файл, если вы еще этого не знали.

1

Как вызывается командный файл?
Если это из планировщика заданий, то вы также можете остановить его оттуда. Если это из службы, то вы можете остановить службу.

1

Нашел эту тему на форуме:

http://www.gamedev.net/community/forums/topic.asp?topic_id=261694

Он предлагает использовать ShellExecuteEx (или CreateProcess), чтобы вы могли получить дескриптор процесса, который затем можно использовать для уничтожения процесса.

0

Если он открыт в командной строке, вы можете нажать Ctrl+C. Подождите несколько секунд, и это будет прекращено.

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