wprowadzenie
Serwer Linuksowy, jak każdy inny komputer, z którym możesz być zaznajomiony, uruchamia aplikacje. Dla komputera są one uważane za „procesy”.
podczas gdy Linux będzie obsługiwał niskopoziomowe zarządzanie za kulisami w cyklu życia procesu, będziesz potrzebował sposobu interakcji z systemem operacyjnym, aby zarządzać nim z wyższego poziomu.
w tym przewodniku omówimy kilka prostych aspektów zarządzania procesami. Linux dostarcza bogatą kolekcję narzędzi do tego celu.,
rozważymy te pomysły na Ubuntu 12.04 VPS, ale każda nowoczesna dystrybucja Linuksa będzie działać w podobny sposób.
Jak wyświetlić uruchomione procesy w Linuksie
Góra
najprostszym sposobem na sprawdzenie, jakie procesy działają na twoim serwerze, jest uruchomienie poleceniatop
:
top
górna część informacji podaje statystyki systemu, takie jak obciążenie systemu i całkowita liczba zadań.
łatwo widać, że jest 1 uruchomiony proces, a 55 procesów śpi (aka idle/not using CPU resources).,
dolna część zawiera uruchomione procesy i ich statystyki użytkowania.
htop
ulepszona wersjatop
, o nazwiehtop
, jest dostępna w repozytoriach. Zainstaluj go za pomocą tego polecenia:
sudo apt-get install htop
Jeśli uruchomimyhtop
, zobaczymy, że jest bardziej przyjazny dla użytkownika wyświetlacz:
htop
możesz dowiedzieć się więcej o tym, jak używać top i htop tutaj.,
jak używać ps do wyświetlania procesów
zarównotop
, jak ihtop
zapewniają ładny interfejs do wyświetlania uruchomionych procesów podobnych do graficznego Menedżera zadań.
jednak narzędzia te nie zawsze są wystarczająco elastyczne, aby odpowiednio uwzględnić wszystkie scenariusze. Potężne polecenie o nazwie ps
jest często odpowiedzią na te problemy.,
gdy wywołane bez argumentów, wyjście może być nieco lustrzane:
ps
PID TTY TIME CMD 1017 pts/0 00:00:00 bash 1262 pts/0 00:00:00 ps
to wyjście pokazuje wszystkie procesy związane z bieżącą sesją użytkownika i terminala. Ma to sens, ponieważ obecnie uruchamiamy tylkobash
Ips
z tym terminalem.,
aby uzyskać pełniejszy obraz procesów w tym systemie, możemy uruchomić następujące opcje:
ps aux
te opcje mówiąps
aby wyświetlić procesy należące do wszystkich użytkowników (niezależnie od ich powiązania z terminalami) w przyjaznym dla użytkownika formacie.
aby zobaczyć widok drzewa, w którym są ilustrowane relacje hierarchiczne, możemy uruchomić polecenie z następującymi opcjami:
ps axjf
jak widać, proceskthreadd
jest wyświetlany jako rodzicksoftirqd/0
proces i inne.,
Uwaga o identyfikatorach procesów
w systemach Linux i Unix-podobnych każdemu procesowi przypisany jest identyfikator procesu lub PID. W ten sposób system operacyjny identyfikuje i śledzi procesy.
szybkim sposobem uzyskania PID procesu jest poleceniepgrep
:
pgrep bash
1017
spowoduje to po prostu Zapytanie o identyfikator procesu i zwrócenie go.
pierwszy proces pojawiający się podczas rozruchu, zwany init, otrzymuje PID „1”.,
pgrep init
1
proces ten jest następnie odpowiedzialny za wywołanie każdego innego procesu w systemie. Późniejsze procesy otrzymują większe liczby PID.
rodzicem procesu jest proces, który był odpowiedzialny za jego zrolowanie. Procesy nadrzędne mają PPID, który można zobaczyć w nagłówkach kolumn w wielu aplikacjach do zarządzania procesami, w tym top
, htop
I ps
.,
każda komunikacja pomiędzy Użytkownikiem a systemem operacyjnym na temat procesów polega na tłumaczeniu między nazwami procesów i PID w pewnym momencie podczas operacji. Dlatego narzędzia mówią ci PID.
relacje rodzic-dziecko
tworzenie procesu potomnego odbywa się w dwóch krokach: fork(), który tworzy nową przestrzeń adresową i kopiuje zasoby należące do rodzica poprzez kopiowanie przy zapisie, aby były dostępne dla procesu potomnego; oraz exec (), który ładuje plik wykonywalny do przestrzeni adresowej i wykonuje go.,
w przypadku, gdy proces potomny umiera przed swoim rodzicem, staje się zombie, dopóki rodzic nie zbierze informacji o nim lub nie wskaże jądra, że nie potrzebuje tych informacji. Zasoby z procesu potomnego zostaną wtedy uwolnione. Jeśli proces rodzic umrze przed dzieckiem, dziecko zostanie zaadoptowane przez init, choć może być również przypisane do innego procesu.
jak wysyłać sygnały procesów w Linuksie
wszystkie procesy w Linuksie reagują na sygnały. Sygnały są sposobem na poziomie systemu operacyjnego informującym programy o zakończeniu lub zmianie ich zachowania.,
Jak wysyłać sygnały procesów za pomocą PID
najczęstszym sposobem przekazywania sygnałów do programu jest polecenie kill
.
jak można się spodziewać, domyślną funkcjonalnością tego narzędzia jest próba zabicia procesu:
<pre>
zabić <span class=”highlight”>pidoftarget_process</span>
</pre>
wysyła sygnał term do procesu., Termin sygnał mówi proces proszę zakończyć. Pozwala to programowi wykonywać operacje czyszczenia i płynnie wyjść.,
Jeśli program źle się zachowuje i nie kończy, gdy podano sygnał TERM, możemy eskalować sygnał, przekazując KILL
sygnał:
<pre>
kill-KILL <span class=”highlight”>pidoftarget_process</span>
</Pre>
jest to specjalny sygnał, który nie jest wysyłany do programu.,
zamiast tego jest ona przekazywana do jądra systemu operacyjnego, które zamyka proces. Służy to do ominięcia programów, które ignorują wysyłane do nich sygnały.
każdy sygnał ma przypisany numer, który można przekazać zamiast nazwy. Na przykład, możesz przekazać „-15” zamiast „-TERM” i „-9” zamiast „-KILL”.
Jak używać sygnałów do innych celów
sygnały są używane nie tylko do wyłączania programów. Mogą być również wykorzystywane do wykonywania innych czynności.
na przykład wiele demonów uruchomi się ponownie, gdy otrzyma HUP
lub sygnał rozłączenia., Apache jest jednym programem, który działa w ten sposób.
<pre>
sudo kill-HUP <span class=”highlight”>pidofapache</span>
</pre>
powyższe polecenie spowoduje ponowne załadowanie pliku konfiguracyjnego Apache i wznowienie obsługi zawartości.,
możesz wyświetlić listę wszystkich sygnałów, które można wysłać za pomocą kill, wpisując:
kill -l
Jak wysyłać sygnały procesów po nazwie
chociaż konwencjonalny sposób wysyłania sygnałów odbywa się za pomocą PID, istnieją również metody wykonywania tego z zwykłymi nazwami procesów.,
polecenie pkill
działa prawie dokładnie tak samo jak kill
, ale zamiast tego działa na nazwie procesu:
pkill -9 ping
powyższe polecenie jest odpowiednikiem:
kill -9 `pgrep ping`
Jeśli chcesz wysłać sygnał do każdej instancji określonego procesu, możesz użyć polecenia killall
:
killall firefox
powyższe polecenie wyśle sygnał term do każdej instancji Firefoksa uruchomionej na komputerze.,
jak dostosować priorytety procesów
często będziesz chciał dostosować, które procesy mają priorytet w środowisku serwerowym.
niektóre procesy mogą być uznane za krytyczne dla twojej sytuacji, podczas gdy inne mogą być wykonywane, gdy mogą być resztki zasobów.
Linux kontroluje priorytet poprzez wartość o nazwie niceness.
zadania o wysokim priorytecie są uważane za mniej przyjemne, ponieważ nie dzielą się również zasobami. Z drugiej strony procesy o niskim priorytecie są ładne, ponieważ nalegają na pobranie tylko minimalnych zasobów.,
kiedy uruchomiliśmytop
na początku artykułu pojawiła się kolumna oznaczona „NI”. Jest to wartość nice procesu:
top
wartości Nice mogą wahać się między „-19/-20” (najwyższy priorytet) i „19/20” (najniższy priorytet) w zależności od systemu.,
To run a program with a certain nice value, we can use the nice
command:
<pre>
nice -n 15 <span class=”highlight”>commandtoexecute</span>
</pre>
This only works when beginning a new program.,
<pre>
renice 0<span class=”highlight”>pidtoprioritize</span>
</Pre>
uwaga: podczas gdy nice działa z nazwa polecenia z konieczności, Renice działa poprzez wywołanie procesu pid
podsumowanie
zarządzanie procesami jest tematem, który jest czasami trudny do uchwycenia dla nowych użytkowników, ponieważ używane narzędzia różnią się od ich Graficznych odpowiedników.,
jednak pomysły są znane i intuicyjne, a przy odrobinie praktyki staną się naturalne. Ponieważ procesy są zaangażowane we wszystko, co robisz z systemem komputerowym, uczenie się, jak skutecznie je kontrolować, jest podstawową umiejętnością.
< div class=”author” > by Justin Ellingwood </div>
Leave a Reply