Chcę skryptu, który zabija instancję (y), ssh
które są uruchamiane z argumentem -D (konfigurowanie lokalnego proxy).
Ręcznie, szukam ps -A | grep -i ssh
instancji z -D i kill -9 {id}
każdą z nich.
Ale jak to wygląda w formie skryptu bash?
(Jestem na Mac OS X, ale zainstaluję niezbędne polecenia za pośrednictwem port
)
pgrep
ipkill
są poleceniami do niezawodnego znajdowania lub zabijania procesów według nazw w systemach Solaris i Linux.Odpowiedzi:
Uruchom
pgrep -f "ssh.*-D"
i sprawdź, czy to zwróci prawidłowy identyfikator procesu. Jeżeli tak, wystarczy zmienićpgrep
siępkill
i zachować te same opcje i wzórPonadto, nie powinieneś używać
kill -9
aka SIGKILL, chyba że jest to absolutnie konieczne, ponieważ programy nie mogą uwięzić SIGKILL, aby posprzątać po sobie przed wyjściem. Używam dopierokill -9
po pierwszej próbie-1
-2
i-3
.źródło
for
pętlę, która działakill -i
dla każdegoi
;)pgrep
nie jest macierzysty w OSX, musisz go uzyskać od strony trzeciej. Poprzedni wątek na ten temat zawiera propozycje i alternatywy.-a
flagi,pgrep
która powoduje, że wypisuje ona nie tylko identyfikator procesu, ale także polecenie (w tym argumenty). W ten sposób bardzo łatwo jest zweryfikować, że pasują tylko pożądane procesy.Również,
źródło
pkill
Możesz wykorzystać system plików proc do zebrania informacji. Na przykład:
To nie jest idealne, będziesz potrzebować bardziej ekskluzywnego wyrażenia regularnego (szczególnie jeśli zabijasz procesy), ale
echo $proc | awk -F'/' '{ print $3 }'
pokaże ci PID procesu (ów).źródło
/proc
. Istnieje już niezawodne narzędzie do tego, o nazwiepgrep
(dostępne natywnie przynajmniej w systemach Solaris i Linux).