Запускайте команды в новых терминалах, а потом убивайте

У меня есть start.bat, похожий на следующий:

start npx tailwindcss -i ./www/src/styles/main.css -o ./www/dist/styles/main.css --watch
start caddy run

Он запускает 2 новых приглашения cmd и запускает процессы внутри них (которые оба работают бесконечно). Есть ли способ для этого bat-файла отправить команду kill на созданные им cmds? В идеале у меня была бы одна команда, чтобы убить все созданные «дочерние» процессы.

Из любопытства, есть ли причина, по которой вам нужно использовать пакетный файл, а не сценарий PowerShell?

Nick Bailey 18.03.2022 22:02

Нет, PS было бы хорошо. Я просто больше знаком с партиями.

icanfathom 18.03.2022 22:06

Не называйте пакетный файл командой, start, потому что в противном случае вы можете непреднамеренно выполнять циклические вызовы…

aschipfl 18.03.2022 22:30

В качестве отступления: то, что вы создаете, не является экземпляром cmd.exe, если только исполняемые файлы, которые вы вызываете (npx, caddy), не реализуются как пакетные файлы. В противном случае исполняемые файлы запускаются напрямую, без участия оболочки, такой как cmd.exe.

mklement0 18.03.2022 23:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Решение PowerShell — что приемлемо как подразумеваемый по тегам этого вопроса и как явно указано icanfathom (OP) в комментарии («Нет, PS подойдет») — с использованием командлетов Start-Process и Stop-Process:

$processes = & {
  Start-Process -PassThru npx 'tailwindcss -i ./www/src/styles/main.css -o ./www/dist/styles/main.css --watch'
  Start-Process -PassThru caddy run
}

# ...

# Stop (kill) all launched processes.
$processes | Stop-Process
Ответ принят как подходящий
set "wintitle=my process %time%"
start "%wintitle%" npx tailwindcss -i ./www/src/styles/main.css -o ./www/dist/styles/main.css --watch
start "%wintitle%" caddy run

....

taskkill /FI "WINDOWTITLE eq %wintitle%"

[непроверено] - должно работать в теории...

Всегда лучше использовать start с заголовком в кавычках, поскольку в противном случае первая строка в кавычках, которую видит команда start, может быть съедена и использована в качестве заголовка.

Другие вопросы по теме