cmdsubst>
jest drugim monitem drukowanym przez zsh
powłokę, gdy czeka ona na zakończenie wprowadzania komendy.
Jeśli pojawi się ten monit po wprowadzeniu killl<Return>
, to jedynym rozsądnym wyjaśnieniem jest to, że masz alias (który jest formą rozwijania makra ciągów), killl
który rozwija się do czegoś, co zawiera nieskończone $(...)
podstawianie poleceń, na przykład:
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
Gdzie zsh
prosi o zamknięcie $(...)
podstawienia polecenia.
Jeszcze kilka notatek:
- wynik
lsof
jest sortowany według pid. numery pid są opakowane, większy pid nie gwarantuje, że proces został rozpoczęty później.
-i:8080
zgłosi gniazda TCP lub UDP, które mają port 8080 jako port źródłowy lub docelowy, niezależnie od tego, czy jest to gniazdo nasłuchujące, przyjmujące czy łączące.
- Jeśli chcesz uzyskać tylko pid, możesz skorzystać z
-t
opcji lsof
:lsof -ti:8080 | tail -n2
kill -9
to kill -s KILL
, który wysyła sygnał, że aplikacja nie może podjąć działania, aby zakończyć działanie z wdziękiem. Powinien być stosowany tylko w ostateczności.
Aby zabić ostatnio rozpoczęty proces, który jest powiązany z gniazdem (dowolnym końcem) na porcie 8080, możesz:
#! /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)}'
(zakłada GNU sort
(jak znaleziono w macOS) i ps
implementację, która obsługuje lstart
kolumnę (jak macOS i procps-ng, chociaż kod musiałby zostać zaktualizowany do procps-ng, gdzie pola miesiąca i dnia są zamieniane)).
killl
?