1. Zamykanie procesów
Dzisiaj zrobimy krok dalej i opanujemy komendy, które pozwalają skutecznie zamykać procesy. Przygotuj się, bo twoja cierpliwość do "zawieszających się" programów wkrótce się skończy!
Każda uruchomiona aplikacja lub komenda w Linux to proces. Ale co zrobić, jeśli program się zawiesił, zużywa 100% zasobów procesora lub po prostu przestał działać jak należy? Zadanie administratora (lub dewelopera) – interweniować i zamknąć "buntowniczy" proces. W Linuxie do tego służy cała gama narzędzi: kill, killall i pkill. Nie martw się, mimo groźnych nazw, nie jesteśmy tutaj po to, żeby niszczyć wszystko na swojej drodze. Bardziej chodzi o elegancki sposób na przywrócenie porządku.
2. Komenda kill
Podstawy
Komenda kill zamyka proces na podstawie jego identyfikatora (PID). PID to unikalny numer przypisany do każdego procesu przez system. Na przykład, jeśli chcesz zakończyć proces o PID 1234, użyj następującej komendy:
kill 1234
Linux jest dość elastyczny, dlatego komenda kill wysyła procesowi nie rozkaz "umrzyj", ale prośbę o zakończenie. Ta prośba to tzw. "sygnał". Domyślnie kill wysyła sygnał SIGTERM (15).
Co to jest sygnał?
Linux używa sygnałów do komunikacji z procesami. To jak wysyłanie pocztówek z różnymi intencjami:
SIGTERM(15): "Proszę, zakończ się". To grzeczna prośba do procesu o zakończenie działania.SIGKILL(9): "Koniec, jesteś zwolniony!" Wymuszone zakończenie procesu.SIGHUP(1): "Hej, przeładuj konfigurację". Używane do restartu niektórych procesów bez ich kończenia.
Przykład wymuszonego zamknięcia procesu:
kill -9 1234
Jeśli proces odmawia zakończenia po sygnale SIGTERM, możesz wysłać bardziej zdecydowany sygnał — SIGKILL.
Jak sprawdzić PID procesu?
Aby użyć komendy kill, musisz znać PID procesu. Tutaj pomocne mogą być dobrze znane komendy ps, top lub htop. Na przykład wynik komendy ps aux pokaże wszystkie uruchomione procesy:
ps aux | grep firefox
To zapytanie znajdzie proces Firefox i wyświetli jego PID.
Proces zakończony, możesz odetchnąć z ulgą. Ale co zrobić, jeśli "zawieszonych" procesów jest kilka? Tutaj do akcji wchodzą komendy killall i pkill.
3. Komenda killall
Wygoda masowego zamykania
Komenda killall pozwala zamknąć wszystkie procesy o określonej nazwie. Nie musisz ręcznie szukać PID, wszystko jest o wiele prostsze. Na przykład, jeśli chcesz zamknąć wszystkie instancje Firefox:
killall firefox
Tak jak komenda kill, killall wysyła procesom sygnały. Możesz określić konkretny sygnał:
killall -9 firefox
Przydatna wskazówka
Bądź ostrożny z komendami typu killall. Jeśli przypadkowo wskażesz zbyt ogólny proces, na przykład killall python, możesz zakończyć jednocześnie wszystkie uruchomione aplikacje Python, w tym zadania serwerowe czy ważne skrypty.
Jakie sygnały są obsługiwane?
Dla wszystkich komend kill, killall i pkill listę dostępnych sygnałów możesz zobaczyć za pomocą komendy:
kill -l
4. Polecenie pkill
Wyszukiwanie procesów po nazwie (lub jej części)
Polecenie pkill działa podobnie do killall, ale jest bardziej elastyczne. Pozwala zakończyć procesy, które pasują do określonego wzorca. Na przykład:
pkill fire
Polecenie zakończy wszystkie procesy, które zawierają słowo "fire" w nazwie. To jest przydatne w przypadkach, gdy nazwa procesu jest długa lub znasz tylko jej część.
Zakończenie procesów konkretnych użytkowników
Możesz zakończyć procesy należące do określonych użytkowników. Na przykład:
pkill -u username
To zakończy wszystkie procesy należące do użytkownika username.
Porównanie kill, killall i pkill
| Polecenie | Cechy |
|---|---|
kill |
Zakończenie procesu po PID. Działa precyzyjnie. |
killall |
Zakończenie wszystkich procesów o podanej nazwie. Przydatne do masowego zamykania. |
pkill |
Zakończenie procesów po nazwie lub wzorcu. Obsługuje dodatkowe parametry, takie jak nazwa użytkownika. |
5. Praktyka: zamykamy procesy
Spróbujmy teraz wszystkiego, czego się nauczyliśmy, w praktyce. Na początek uruchomimy kilka długo działających procesów:
sleep 300 &
sleep 400 &
sleep 500 &
Te komendy utworzą trzy procesy w tle z różnym czasem oczekiwania. Teraz możesz pracować z komendami kill, killall i pkill.
- Wyświetl wszystkie uruchomione procesy
sleepza pomocą komendyps:
ps aux | grep sleep
Zobaczysz PID każdego procesu.
- Zamknij proces z PID, na przykład 1234:
kill 1234
- Zamknij od razu wszystkie procesy
sleep:
killall sleep
- Uruchom jeszcze kilka procesów
sleepi zamknij je za pomocąpkill:
pkill sl
6. Typowe błędy i ważne niuanse
Jeśli próbujesz zakończyć proces, do którego nie masz uprawnień (na przykład proces innego użytkownika), polecenie zwróci błąd. Do tego potrzebujesz uprawnień superużytkownika (sudo). Na przykład:
sudo kill 1234
Innym źródłem zamieszania może być użycie zbyt agresywnych sygnałów -9. To jest odpowiednik wyłączenia komputera z gniazdka: system nie zdąży zwolnić zasobów ani zapisać danych. Używaj SIGKILL tylko w ostateczności.
Bądź ostrożny z killall i pkill, zwłaszcza jeżeli zarządzasz serwerem. Zamykanie procesów "na ślepo" może prowadzić do utraty ważnych danych.
Dlaczego warto znać polecenia do zamykania procesów?
Te polecenia mają szeroki zakres zastosowań, poczynając od niszczenia zawieszonych aplikacji aż po zarządzanie procesami serwera. Na rozmowach kwalifikacyjnych znajomość kill i pkill może świadczyć o Twojej kompetencji, zwłaszcza jeśli chodzi o administrowanie systemami lub pracę z backendem.
Wykorzystaj tę wiedzę do tworzenia skryptów, które automatycznie zakończą niekontrolowane procesy lub zwolnią zajęte porty. Na przykład przed uruchomieniem serwera, który używa portu 8080, można użyć:
pkill -f "port 8080"
Elastyczność i moc tych poleceń czynią je niezastąpionymi narzędziami każdego specjalisty Linux.
GO TO FULL VERSION