cmdsubst>jest drugim monitem drukowanym przez zshpowł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), killlktóry rozwija się do czegoś, co zawiera nieskończone $(...)podstawianie poleceń, na przykład:
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
Gdzie zshprosi o zamknięcie $(...)podstawienia polecenia.
Jeszcze kilka notatek:
- wynik
lsofjest 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
-topcji lsof:lsof -ti:8080 | tail -n2
kill -9to 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 psimplementację, która obsługuje lstartkolumnę (jak macOS i procps-ng, chociaż kod musiałby zostać zaktualizowany do procps-ng, gdzie pola miesiąca i dnia są zamieniane)).
killl?