Посмотрев на это некоторое время, кажется, что нет никакого чистого способа убить задачу в VS Code, которая была запущена как часть preBuildTask
. Это задача сборки, и сама задача отладки кажется отдельной от нее. Поскольку сам PID отладки нацелен на Chrome, между ними существует странное разделение.
Итак, давайте перебьем его.
Во-первых, нам нужно запустить наш начальный ng serve
как дочерний процесс, чтобы другая задача не жаловалась на то, что первая задача загружает терминал. У меня сработала эта задача:
{
"version": "2.0.0",
"tasks": [
{
"label": "serve",
"command": "ng serve",
"isBackground": true,
"type": "shell",
"presentation": {
"reveal": "always"
},
"problemMatcher": {
"fileLocation": "relative",
"background": {
}
}
}
]
}
Обратите внимание на свойство isBackground
. Это создаст любые будущие задачи в их собственной оболочке. presentation
равно reveal: always
, поэтому мы можем видеть вывод CLI. Мы можем пофантазировать и зафиксировать проблемы CLI с процессом отладки в problemMatcher
, но давайте пока забудем об этом.
Теперь давайте сделаем kill
задачу. Вместо того, чтобы работать через VS Code, чтобы найти начальную порожденную задачу, давайте сделаем это через нашу ОС. Теперь это сильно зависит от какой ОС и какой оболочки вы используете (оболочки можно настроить для каждой задачи с помощью свойства shell
).
Нам нужно найти PID оболочки ng serve
и отправить его на большой компьютер в небе. Мы можем найти PID, занимающий обслуживаемый порт localhost, который, как я предполагаю, по умолчанию равен 4200.
Пример команды CMD:
for /F "tokens=1,2,3,4,5" %A in ('"netstat -a -n -o | find 4200""') DO ('"Taskill /PID %E /F"')
Пример команды bash / terminal (как обычно проще):
[sudo] lsof -ti:4200 | xargs kill
Затем просто создайте kill
задачу с помощью команды и добавьте ее в postDebugTask
:
{
"label": "kill",
"command": "lsof -ti:4200 | xargs kill",
"type": "shell",
}
Если вы столкнулись с правами доступа, вы, вероятно, можете исправить это, запустив VS Code от имени администратора или указав путь к .exe, где у вас уже есть права администратора. Опять же, это зависит от вашей оболочки и ОС.
person
joh04667
schedule
11.12.2018