Итак, у меня есть процесс, который я начал с одного файла bat. Как остановить его от другого?
Как остановить процесс из .BAT файла?
Ответ 1
Чтобы завершить процесс, вы знаете имя, попробуйте:
taskkill /IM notepad.exe
Это попросит его закрыть, но он может отказаться, предложить "сохранить изменения" и т.д. Если вы хотите принудительно убить его, попробуйте:
taskkill /F /IM notepad.exe
Ответ 2
Поскольку TASKKILL может быть недоступен в некоторых домашних/основных версиях окон, здесь есть несколько альтернатив:
TSKILL processName
или
TSKILL PID
Имейте в виду, что processName
не должен иметь суффикс .exe
и ограничен 18 символами.
Другим вариантом является WMIC
:
wmic Path win32_process Where "Caption Like 'MyProcess.exe'" Call Terminate
wmic предлагает еще большую гибкость, чем taskkill. С wmic Path win32_process get
вы можете видеть доступные файлы, которые вы можете фильтровать.
Ответ 3
Когда вы запускаете процесс из командного файла, он запускается как отдельный процесс без каких-либо намеков на пакетный файл, который его запускал (так как это закончило бы работать в то же время, такие вещи, как идентификатор родительского процесса, не помогут вы).
Если вы знаете имя процесса и оно уникально среди всех запущенных процессов, вы можете использовать taskkill
, как это предлагает @IVlad в комментарии.
Если это не уникально, вы можете посмотреть на задания. Они завершают все порожденные дочерние процессы, когда они завершаются.
Ответ 4
Почему вы не используете PowerShell?
Stop-Process -Name notepad
И если вы находитесь в пакетном файле:
powershell -Command "Stop-Process -Name notepad"
powershell -Command "Stop-Process -Id 4232"
Ответ 5
taskkill/F/IM notepad.exe, это лучший способ убить задачу из диспетчера задач.