Jaka jest różnica między pkill a killall?


49

Wiem, że pkillma 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 killalljest to bardziej skuteczne i zabijam wszystkie procesy i podprocesy (i rekurencyjnie) pasujące do nameprogramu. pkillteż tego nie robi?


Odpowiedzi:


46

Narzędzia pgrepi pkillzostał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 gdy pgrepdrukuje jedynie listę pasujących procesów, pkillwyśle ​​określony sygnał (lub SIGTERMdomyślnie) do procesów. Wspólne opcje i semantyka pomiędzy pgrepi pkillprzydają się, gdy chcesz zachować ostrożność i najpierw przejrzeć procesy dopasowywania listy pgrep, a następnie zabić je pkill. pgrepi pkillsą dostarczane przez te Procps pakietu, który przewiduje również inne /procnarzędzia systemu plików, takie jak ps, top, free, uptimemiędzy innymi.

killallKomenda jest przez Psmisc pakietu, i różni się od pkilltym, ż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, --exactOpcja może być określona również wymagają dokładnych wyników dla nazw dłuższych niż 15 znaków. To sprawia, że killallkorzystanie z niej jest nieco bezpieczniejsze w porównaniu do pkill. 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. killallobsługuje także dopasowywania wyrażeń regularnych nazw procesowych, za pośrednictwem -r, --regexpopcja.

Istnieją również inne różnice. killallKomenda na przykład ma możliwości dopasowania procesów według wieku ( -o, --older-thana -y, --younger-than), natomiast pkillmożna powiedzieć, aby zabić tylko procesy dotyczące konkretnego terminala (poprzez -topcję). Oczywiście oba polecenia mają określone nisze.

Zauważ, że killallpolecenie 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 killallsemantyka „zabija procesy według nazwy”.


Główną różnicą, z jaką się spotkałem, jest zatrzymywanie poleceń użytkownika przez wzorzec killall -u <username> -r <process>lub to, pkill <process> -U <uid>co killallznacznie ułatwia mi korzystanie z niego.
jeremysprofile

13

pkilljest 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żytku pgrep. 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ń).


8

jedną różnicą jest to, że killalljako argument przyjmuje się dokładną nazwę procesu, podczas gdy pkillmoże ona przyjmować częściową lub pełną nazwę.

Możesz odnieść się do tego pytania, aby uzyskać szczegółowe informacje na temat pkill


1

killall- zabijaj procesy według nazwy. Użyj killallpolecenia, 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. pkillmoże sygnalizować wiele procesów killall, ale może również stosować zaawansowane kryteria wyboru, które mogą obejmować dowolną kombinację:

Command UID Terminal nadrzędny

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.