Як зупинити процес летучої миші в Windows?


9

У мене BAT-файл працює у фоновому режимі в Windows, який триває близько десяти хвилин. Тепер я хочу зупинити його під час роботи, але я не можу знайти його ім'я в списку процесів у менеджері завдань. То як я можу підійти до цього? Дякую!

ОНОВЛЕННЯ1

Мені здається важко зупинити запущений BAT-процес у backgroud.І я вирішу спробувати знищити кожен процес, що бере участь у файлі BAT по імені, який може бути перенаселений. Це для мене прийнятно, оскільки більшість процесів у моєму файлі BAT не використовуються часто, наприклад, ping, tracert, netstat і т.д. Якщо у вас є краще рішення, будь ласка, дайте мені знати.

ОНОВЛЕННЯ2

Дерево технологічного процесу BAT

alt текст


Як ви змусили файл bat працювати у фоновому режимі? ви кажете, що не можете робити ctrl-c. Я б спробував break = on, якщо це не працює, але ви кажете, що не можете робити ctrl-c, оскільки це "у фоновому режимі". Можливо, він уже пробіг і закінчився, і вам просто доведеться вбити те, що воно породило.
барлоп

1
@ barlop, це може бути виправдано в backgroud з ShellExecute(NULL,"open","some.bat",NULL,NULL,SW_HIDE);в VC ++.
НерестST

Відповіді:


10

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

alt текст


Убити Дерево Процесу здається трохи важким. Можливо, буде достатньо, щоб знищити батьківський процес (команда bat).
wag2639

1
@ wag2639, прочитавши питання, я подумав, що хоче покласти край BAT і породив процеси? Коли кажуть, що обробляти потрібно так багато часу, я розумію, що коли процеси запускаються, і тоді нічого не відбувається, поки вони не напишуть відповідь ... Якщо дерево не закінчиться, просто буде купа запущених процесів, які є нічого не робити.
Вільям Гілсум

Я намагався таким чином і додав картинку у свою відповідь.Дякую.І тепер я знаходжу команду, яка може знищити процес, запущений файлом BAT та його дітьми taskkill /F /T /IM cmd.exe. Єдина проблема полягає в тому, що кожен BAT-файл запустить cmd.exeпроцес із різним PID . Мені потрібно розібратися, яка з них - моя ціль.
НерестST

@SpawnST, який процес запускає файл BAT? Вам потрібно вбити предмет, який його запускає, тоді, якщо є кілька копій.
Вільям Гілсум

@ Wil, він починається процесом MFC / Dialog. Діалогове вікно запускає файл BAT з оболонкою вікна, коли він ініціалізований. Зараз я намагаюся забезпечити, щоб процес BAT повністю вичерпаний, коли діалогове вікно закінчиться.
НерестST

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

Це гарна ідея. Але я думаю, що це може спричинити деякі проблеми у моєму додатку, наприклад, коли команда виконується протягом тривалого часу, tracertнаприклад.
НерестST

Так, це я зараз роблю, насправді жорстокий :-). І, можливо, у цьому рішенні файл блокування не потрібен.
НерестST

Це необхідно, щоб пакетний файл не виконував наступне завдання, коли його поточне припиняється. В іншому випадку може статися, що task1 припиняється, а task2 запускається після того, як його виконання завдання вже виконано, тому пакет убивства просто пропустить на task2.
harrymc

1

BAT зазвичай просто запускає екземпляр CMD.exe. Залежно від того, що робить ваш сценарій, він також запустить інші процеси.


То чи існує якийсь спосіб, який може зупинити його, продовжуючи інші процеси?
НерестST

1
@SpawnST: Якщо видно вікно CMD, ви не можете просто ввести CTRL + C?
парадороїд

@ jason404, як я вже згадував у запитанні, він працює у фоновому режимі.
НерестST

1

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


Я роблю цю роботу з VC ++ / MFC, і я думаю, що мені потрібні деякі команди Windows, щоб це виконати. Дякую за відповідь.
НерестST

1

Як викликається пакетний файл?
Якщо це з Планувальника завдань, то ви також можете зупинити його звідти. Якщо це від сервісу, то його можна припинити.



0

Якщо він відкритий у командному рядку, ви можете натиснути Ctrl+ C. Зачекайте кілька секунд, і воно припиниться.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.