Skrypt, o którym mowa, kończy najnowszy proces na moim lokalnym porcie 8080.
#!/bin/bash
x=$(lsof -i:8080 | tail -1 | awk '{print $2}')
kill -9 $x
Nie działało, jeśli skrypt miał nazwę „killl” (rozumiesz? Kill Latest?). Dało mi monit o cmdsubst>
zmianę nazwy skryptu na „asdf”, wszystko działa. Czy istnieje wyjaśnienie tego zachowania? Używam MacOS El Capitán.
shell-script
osx
Zeick
źródło
źródło
killl
?killl
może zostać źle zinterpretowany jako błędnie napisanykill
. Lepiej jest być wyraźnym i opisowym:kill_latest
lubkill_last
.type killl
powłoki, w której próbowałeś ją uruchomić?Odpowiedzi:
cmdsubst>
jest drugim monitem drukowanym przezzsh
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:Gdzie
zsh
prosi o zamknięcie$(...)
podstawienia polecenia.Jeszcze kilka notatek:
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.-t
opcjilsof
:lsof -ti:8080 | tail -n2
kill -9
tokill -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:
(zakłada GNU
sort
(jak znaleziono w macOS) ips
implementację, która obsługujelstart
kolumnę (jak macOS i procps-ng, chociaż kod musiałby zostać zaktualizowany do procps-ng, gdzie pola miesiąca i dnia są zamieniane)).źródło
Ponieważ po wpisaniu polecenia nie został wpisany
wpisałeś lub podobne. Nie miało to nic wspólnego z nazwą skryptu, ani nawet, że był to skrypt. Ten sam efekt można osiągnąć za pomocą całkowicie nieistniejącego polecenia: Parser powłoki oczekiwał więcej danych wejściowych, aby zakończyć jedyne częściowo zakończone polecenie. Twoje myślenie o nazwie skryptu to kompletny czerwony śledź.źródło
killl $(
z jakiegoś powodu pisał na maszynie i jest bardzo mało prawdopodobne, aby to zrobił. Odpowiedź Stéphane'a Chazelasa jest bardziej prawdopodobna.`
jest bardziej prawdopodobne niż$(
.`
jest mało prawdopodobne, ponieważ nie daje tego samego monitu . Spróbuj. Nie, Herhtar; nie jest założeniem, że wpisanie tego lub podobnego jest sposobem na uzyskanie tego monitu . To jest odliczenie.killl
napisał”, kiedy, jak wyjaśnia Stéphane Chazelas, jest całkiem możliwe, że OP rzeczywiście napisałkilll
. W związku z tym uznałem twoją odpowiedź za błędną.