Skrypt Bash, aby znaleźć i zabić proces z określonymi argumentami?


17

Chcę skryptu, który zabija instancję (y), sshktóre są uruchamiane z argumentem -D (konfigurowanie lokalnego proxy).

Ręcznie, szukam ps -A | grep -i sshinstancji 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)


Zobacz alternatywy pgrep i pkill na Mac OS X? . pgrepi pkillsą poleceniami do niezawodnego znajdowania lub zabijania procesów według nazw w systemach Solaris i Linux.
Gilles „SO- przestań być zły”

Odpowiedzi:


26

Uruchom pgrep -f "ssh.*-D"i sprawdź, czy to zwróci prawidłowy identyfikator procesu. Jeżeli tak, wystarczy zmienić pgrepsię pkilli zachować te same opcje i wzór

Ponadto, nie powinieneś używać kill -9aka SIGKILL, chyba że jest to absolutnie konieczne, ponieważ programy nie mogą uwięzić SIGKILL, aby posprzątać po sobie przed wyjściem. Używam dopiero kill -9po pierwszej próbie -1 -2i -3.


powinieneś przedefiniować zabójstwo jako forpętlę, która działa kill -idla każdego i;)
Seamus

1
pgrepnie jest macierzysty w OSX, musisz go uzyskać od strony trzeciej. Poprzedni wątek na ten temat zawiera propozycje i alternatywy.
Gilles „SO- przestań być zły”

człowieku żyje, im więcej używam 'nix, tym bardziej to uwielbiam :) dzięki za to!
javamonkey79

pgrep i pkill są dostępne w OS X 10.8 (Mountain Lion) i nowszych. apple.blogoverflow.com/2012/07/…
Peter Hanley

Przydatne może być dodanie -aflagi, pgrepktó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.
luator


0

Możesz wykorzystać system plików proc do zebrania informacji. Na przykład:

for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done

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).


1
OSX nie ma /proc. Istnieje już niezawodne narzędzie do tego, o nazwie pgrep(dostępne natywnie przynajmniej w systemach Solaris i Linux).
Gilles „SO- przestań być zły”
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.