Wiem, że pkill
ma więcej reguł filtrowania niż killall
. Moje pytanie brzmi, jaka jest różnica między:
pkill [signal] name
i
killall [signal] name
Przeczytałem, że killall
jest to bardziej skuteczne i zabijam wszystkie procesy i podprocesy (i rekurencyjnie) pasujące do name
programu. pkill
też tego nie robi?
linux
process
kill
process-management
mavillan
źródło
źródło
Odpowiedzi:
Narzędzia
pgrep
ipkill
zostały wprowadzone w Solarisie 7 firmy Sun i, jak zauważył g33klord , przyjmują wzorzec jako argument, który jest porównywany z nazwami uruchomionych procesów. Podczas gdypgrep
drukuje jedynie listę pasujących procesów,pkill
wyśle określony sygnał (lubSIGTERM
domyślnie) do procesów. Wspólne opcje i semantyka pomiędzypgrep
ipkill
przydają się, gdy chcesz zachować ostrożność i najpierw przejrzeć procesy dopasowywania listypgrep
, a następnie zabić jepkill
.pgrep
ipkill
są dostarczane przez te Procps pakietu, który przewiduje również inne/proc
narzędzia systemu plików, takie jakps
,top
,free
,uptime
między innymi.killall
Komenda jest przez Psmisc pakietu, i różni się odpkill
tym, że domyślnie jest zgodna z nazwą argumentu dokładnie (do pierwszych 15 znaków) przy określaniu procesów sygnały zostaną wysłane do.-e
,--exact
Opcja może być określona również wymagają dokładnych wyników dla nazw dłuższych niż 15 znaków. To sprawia, żekillall
korzystanie z niej jest nieco bezpieczniejsze w porównaniu dopkill
. Jeśli podany argument zawiera/
znaki ukośnika ( ), argument zostanie zinterpretowany jako nazwa pliku, a procesy uruchamiające ten konkretny plik zostaną wybrane jako odbiorcy sygnału.killall
obsługuje także dopasowywania wyrażeń regularnych nazw procesowych, za pośrednictwem-r
,--regexp
opcja.Istnieją również inne różnice.
killall
Komenda na przykład ma możliwości dopasowania procesów według wieku (-o
,--older-than
a-y
,--younger-than
), natomiastpkill
można powiedzieć, aby zabić tylko procesy dotyczące konkretnego terminala (poprzez-t
opcję). Oczywiście oba polecenia mają określone nisze.Zauważ, że
killall
polecenie potomnych systemów Unix System V (zwłaszcza Solaris firmy Sun , AIX IBM i HP-UX HP ) zabija wszystkie procesy możliwe do wywołania przez konkretnego użytkownika, skutecznie zamykając system, jeśli jest uruchamiany przez root.Narzędzia psmisc dla systemu Linux zostały przeniesione do BSD (i rozszerzenia Mac OS X ), stąd
killall
semantyka „zabija procesy według nazwy”.źródło
killall -u <username> -r <process>
lub to,pkill <process> -U <uid>
cokillall
znacznie ułatwia mi korzystanie z niego.pkill
jest tym, który warto uczyć przyszłym pokoleniom, zarówno ze względu na wspomniane filtry, jak i fakt, że jest on połączony z wysoce wielokrotnego użytkupgrep
. Zabijają procesy w ten sam sposób i nie zabijają rekurencyjnie - chociaż za pomocąpgrep
, możesz wybrać według sesji (per-tty, think setsid) lub grupy procesów (myśl kontrola zadań).źródło
jedną różnicą jest to, że
killall
jako argument przyjmuje się dokładną nazwę procesu, podczas gdypkill
może ona przyjmować częściową lub pełną nazwę.Możesz odnieść się do tego pytania, aby uzyskać szczegółowe informacje na temat pkill
źródło
killall
- zabijaj procesy według nazwy. Użyjkillall
polecenia, aby wysłać sygnał do jednego lub większej liczby procesów spełniających kryteria wyboru, takich jak nazwa polecenia, procesy należące do określonego użytkownika lub wszystkie procesy systemowe.pkill
- wyśle określony sygnał (domyślnie SIGTERM) do każdego procesu zamiast umieszczania go na standardowym wyjściu.pkill
może sygnalizować wiele procesówkillall
, ale może również stosować zaawansowane kryteria wyboru, które mogą obejmować dowolną kombinację:Command UID Terminal nadrzędny
źródło