cmdsubst>- це вторинна підказка, надрукована zshоболонкою, коли вона чекає закінчення введення підстановки команди.
Якщо ви отримаєте це підказку після простого введення killl<Return>, то єдиним розумним поясненням є те, що у вас є псевдонім (який є деякою формою розширення макросу рядків), killlякий розширюється на те, що містить незакінчену $(...)заміну команди, наприклад:
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
Де zshпросять закрити цю $(...)заміну команди.
Ще кілька приміток:
- вихід
lsofсортується за pid. число підказок завершено, більший pid не є гарантією того, що процес було розпочато пізніше.
-i:8080 повідомить TCP або UDP-сокети, які мають порт 8080 як вихідний або цільовий порт, незалежно від того, чи це сокет прослуховування, прийняття або з'єднання.
- Якщо ви хочете отримати лише pid, ви можете скористатися
-tопцією lsof:lsof -ti:8080 | tail -n2
kill -9тобто kill -s KILLпередає сигнал, що програма не може діяти, щоб вийти граціозно. Його слід використовувати лише в крайньому випадку.
Для вбивства останнього запущеного процесу, який має порт (пов'язаний з сокетом) на порту 8080, ви можете зробити:
#! /bin/sh -
unset IFS
pids=$(lsof -ti:8080) &&
LC_ALL=C ps -o pid=,lstart= -p $pids |
LC_ALL=C sort -k6,6n -k4,4M -k3,3n -k5,5 -k1,1n |
awk 'END{system("kill " $1)}'
(Передбачається , що GNU sort(як знайти на MacOS) і psреалізація , яка підтримує lstartстовпець (наприклад , MacOS »і Procps-нг, хоча код повинен бути поновлений на Procps-нг , де місяць і день поля міняються місцями)).
killl?