Как я могу завершить многие порожденные процессы, не заходя в каждое окно и сделать CTRL + C? - PullRequest
0 голосов
/ 10 марта 2019

Мой полный вопрос: как я могу завершить порожденные процессы, не заходя в каждое отдельное окно, и делать CTRL + C вручную после того, как я закончу с ними, всякий раз, когда я решу это так?

В настоящее время мой командный файл выглядит так:

pushd "System"
start call "#1"
popd
pushd "System(#02)"
start call "#2"
popd
pushd "System(#03KFLM)"
start call "#3"
popd
pushd "System(#04Toy)"
start call "#4"
popd
pushd "System(#05Toy)"
start call "#5"
popd
pushd "System(#06Toy)"
start call "#6"
popd
pushd "System(#07TFF)"
start call "#7"
popd
pushd "System(#08TFF)"
start call "#8"
popd
pushd "System(#09TFF)"
start call "#9"
popd
pushd "System(#10TFF)"
start call "#10"
popd
pushd "System(#11TFF)"
start call "#11"
popd
pushd "System(#12TFF)"
start call "#12"
popd
pushd "System(#13TFF)"
start call "#13"
popd
pushd "System(#14TFF)"
start call "#14"
popd
pushd "System(#15TFF)"
start call "#15"
popd
pushd "System(#16TFF)"
start call "#16"
popd
pushd "System(#17TFF)"
start call "#17"
popd
pushd "System(#18TFF)"
start call "#18"
popd
pushd "System(#19NFF)"
start call "#19"
popd
pushd "System(#20PLA)"
start call "#20"
popd
pushd "System(#21Testing)"
start call "#21"
popd
pushd "System(#22TMSL)"
start call "#22"
popd
pushd "System(#23TMHL)"
start call "#23"
popd
pushd "System(#24TMXL)"
start call "#24"
popd
pushd "System(#25Portal)"
start call "#25"
popd
pushd "System(#26DSKF)"
start call "#26"
popd
pushd "System(#27AKF)"
start call "#27"
popd
pushd "System(#28PAKF)"
start call "#28"
popd
pushd "System(#29VM)"
start call "#29"
popd
pushd "System(#30DM)"
start call "#30"
popd
pushd "System(#31PureDoom3KF)"
start call "#31"
popd
pushd "System(#32Halloween2011)"
start call "#32"
popd
pushd "System(#33Halloween2011)"
start call "#33"
popd
pushd "System(#34Perthians)"
start call "#34"
popd
pushd "System(#35Perthians)"
start call "#35"
popd
pushd "System(#36Perthians)"
start call "#36"
popd
pushd "System(#37Perthians)"
start call "#37"
popd
pushd "System(#38Perthians)"
start call "#38"
popd
pushd "System(#39Deep)"
start call "#39"
popd
pushd "SumoCtryTagsServer"
start call "start-server"
popd
ServerPage

Это для запуска некоторых игровых серверов, префикс # и номер после него действительны, а не заменяют их и относятся к пакетному файлу внутри этих относительных папок. ServerPage - это файл python, поэтому заканчивается расширением .py, если это имеет значение, но остальные являются пакетными файлами, как указано выше, заканчивающимися расширением .bat.

Это прекрасно работает, когда я хочу загрузить 40 серверов + 1 скрипт одновременно, но что если я захочу завершить эти запущенные 41 процесс, как только я закончу с ними?

Я бы зашел в окно каждого процесса и нажал CRTL + C 41 раз, так как их 41, может 82 или более, если они решат бросить вам визуальная ошибка C ++ или что-то, что требует повторного нажатия два или более раз для ответа ...

Конечно, нажатие X в верхнем правом углу происходит быстрее, чем просто CRTL + C , но приведет к внезапному завершению и, следовательно, к любым файлам журнала, которые в данный момент выполняются. не будет правильно закрывать или сохранять. С CRTL + C это дает серверу достаточно времени для правильного сохранения и закрытия любых журналов, которые они могли открыть, и безопасного отключения. Поэтому я должен использовать метод CRTL + C ....

1 Ответ

0 голосов
/ 10 марта 2019

Способ сделать это - использовать taskkill, команду, используемую для завершения (/ kill) процессов с помощью комбинации for /L, которая используется для циклического перебора чисел.

Используйте следующий код:

for /L %%A IN (1 1 41) do (
    for /F "delims=" %%B IN ('dir /B /AD "System(#*%%A*)"') do (
        pushd "%%B" && (
            start "%%A" "#%%A"
            popd
        ) || (
            echo cannot find folder %%B. Please be sure you are in the correct directory.
        )
    )
)

pause

for /L %%C IN (1 1 41) do taskkill /FI "WINDOWTITLE eq %%C" /F

Если у вас есть имя изображения, сделайте taskkill /FI "WINDOWTITLE eq %%C" /F /IM imagename.exe.

Обратите внимание, что:

  • Запуск 41 отдельных процессов с 122 строками кода совершенно бесполезен. Выполните цикл 1-41 и запустите процессы.
  • Не уверен, что тебе нужно start call. Есть ли что-то особенное, чего вы хотите достичь? Я удалил это, так как он используется в редких ситуациях.
  • start "num" "#num": num - заголовок окна; #num - процесс запуска.

Для получения дополнительной информации об используемых командах введите cmd.exe:

  • for /? также объясняет for /L
  • pushd /?
  • start /?
  • call /?
  • pushd /?
  • popd /?
  • taskkill /? объяснение использования
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...