CentOS - polecenie killall (aby zabić wszystkie procesy o nazwach pasujących do danego wzorca)

18

Niedawno zacząłem używać CentOS. Poszedłem, aby spróbować użyć killallnarzędzia, ale znalazłem, że go brakuje, i otrzymuję command not foundkomunikat, gdy próbuję go użyć. Jak mogę uzyskać tę funkcjonalność w moim systemie, aby na przykład zabić wszystkie procesy, których nazwy pasują do wzorca?

Michael Ohlrogge
źródło

Odpowiedzi:

24

pkillUżyteczność jest znacznie lepszą alternatywą killall. killallnie jest przenośny, ponieważ zachowanie polecenia jest bardzo różne w różnych systemach operacyjnych. pkilljest przenośny i wszędzie zachowuje się tak samo. Jest również o wiele bardziej elastyczny, ponieważ zapewnia wiele różnych sposobów dopasowania procesów. Działa również tak samo pasujące zachowanie i argumenty jak pgrepnarzędzie , co pozwala zobaczyć, które procesy zostaną dopasowane i zasygnalizowane bez faktycznej ich sygnalizacji.

Sposób użycia: pkill foo(który byłby taki sam jak killall foo)

Patrick
źródło
2
Myślę, że ta odpowiedź byłaby lepsza, gdyby pokazała, jak dokładnie można jej użyć do zastąpienia killall.
exebook
Jednak nie wszystkie wdrożenia pgrepobsługują -qopcję bycia cichym.
Kusalananda
również byłoby lepiej, gdyby opisał, którego pakietu jest częścią
Xalorous
21

PSmisc zawiera killallnarzędzie wraz z kilkoma innymi małymi, przydatnymi narzędziami. Można go dodać po prostu za pomocą

yum install psmisc
Michael Ohlrogge
źródło
2

Oprócz rozwiązania Patricka funkcjonalność polecenia killall można replikować w następujący sposób:

pkill -15 [process name]

Na przykład, aby zabić wszystkie uruchomione procesy memcached, należy napisać:

pkill -15 memcached

„-15” to numeryczna reprezentacja sygnału SIGTERM POSIX. Aby uzyskać listę wszystkich sygnałów POSIX, które można odpalić w procesie, użyj następującego polecenia:

kill -l

Spowoduje to zwrócenie następującej tabeli:

1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL      10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

Więcej informacji na temat działania każdego sygnału można znaleźć tutaj .

Daniel Kay
źródło
Zauważ, że domyślnie killallwysyła TERMsygnał, a nie KILL.
Kusalananda
1
Słuszna uwaga. Edytowane.
Daniel Kay
Dlaczego dokonałeś edycji tylko po to, by usunąć „Mam nadzieję, że to pomoże!” od końca, @Rui F Ribeiro? Czy istnieją zasady społeczności przeciw próbowaniu uprzejmości?
Daniel Kay
0

Wyobrażam sobie, że systemową alternatywą jest systemctl halt(skrót od systemctl isolate halt.target)?

Xalorous
źródło