cmdsubst>
вторичная подсказка, напечатанная zsh
оболочкой, когда она ожидает окончания подстановки команды.
Если вы получаете это приглашение после простого ввода killl<Return>
, то единственное разумное объяснение состоит в том, что у вас есть псевдоним (который является некоторой формой раскрытия строкового макроса), killl
который расширяется до чего-то, что содержит неопределенную $(...)
подстановку команд, например:
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
Где zsh
просит вас закрыть эту $(...)
подстановку команд.
Еще несколько заметок:
- вывод
lsof
сортируется по pid. Номера pid обернуты, больший pid не гарантирует, что процесс был запущен позже.
-i:8080
будет сообщать о сокетах TCP или UDP с портом 8080 в качестве порта источника или назначения, будь то прослушивающий, принимающий или соединительный сокет.
- Если вы хотите получить только pid, вы можете использовать
-t
опцию lsof
:lsof -ti:8080 | tail -n2
kill -9
is 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-ng, хотя код должен был бы быть обновлен для procps-ng, где поменялись поля месяца и дня)).
killl
?