FreeBSD jest wielozadaniowym systemem operacyjnym. Oznacza to, że korzystając z systemu mamy wrażenie, że wiele programów działa jednocześnie. Działający w danej chwili program nazywany jest procesem. Po wydaniu dowolnego polecenia uruchamiany jest przynajmniej jeden proces. Są również procesy systemowe, które działają nieprzerwanie, zapewniając prawidłowe funkcjonowanie systemu.
Każdemu procesowi przypisany jest jednoznaczny numer zwany
identyfikatorem procesu, lub po prostu
PID. Podobnie jak plik, również każdy
proces ma swojego właściciela i grupę. Na podstawie informacji
o właścicielu i grupie system operacyjny przydziela procesowi
prawa do otwierania plików i urządzeń, przy zastosowaniu opisanych
wcześniej praw dostępu. Większość procesów ma swój proces macierzysty;
jest to proces, który uruchomił dany proces. Przykładowo, kiedy wydajemy
polecenia w powłoce, to zarówno powłoka jest procesem, jak i każde
z wykonanych poleceń. Procesem macierzystym każdego uruchomionego
w ten sposób procesu będzie powłoka. Wyjątkiem jest specjalny proces
zwany init(8). init
jest pierwszym procesem,
więc jego PID jest zawsze równy 1. Proces init
uruchamiany jest przez jądro systemu podczas ładowania FreeBSD.
Są dwa bardzo przydatne polecenia, które pozwalają zobaczyć,
jakie procesy są uruchomione: ps(1) i top(1). Polecenie
ps
pokazuje statyczną listę działających w danej
chwili procesów, uwzględniając informacje takie jak PID-y procesów,
zużywaną pamięć, wydane do uruchomienia procesów polecenia, itd.
Polecenie top
wyświetla listę uruchomionych
procesów, która jest co kilka sekund uaktualniana, dzięki czemu możemy
na bieżąco śledzić, czym zajmuje się komputer.
Domyślnie ps
pokazuje tylko działające procesy
należące do użytkownika wydającego polecenie. Na przykład:
%
ps
PID TT STAT TIME COMMAND 298 p0 Ss 0:01.10 tcsh 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) 37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) 48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi 48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) 72210 p0 R+ 0:00.00 ps 390 p1 Is 0:01.14 tcsh 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y 6688 p3 IWs 0:00.00 tcsh 10735 p4 IWs 0:00.00 tcsh 20256 p5 IWs 0:00.00 tcsh 262 v0 IWs 0:00.00 -tcsh (tcsh) 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish
Jak widzimy, ps(1) wyświetla informacje w kilku kolumnach.
W kolumnie PID
pokazywany jest omówiony wcześniej
identyfikator procesu. PID-y są przydzielane po kolei od 1 do 99999
i znów od początku, gdy się skończą. Kolumna TT
pokazuje terminal, na którym działa program - na razie nie będziemy
się tym zajmować. W kolumnie STAT
przedstawiony jest
stan procesu, jego także na razie nie będziemy omawiać. TIME
pokazuje czas wykorzystywania procesora przez dany proces, niekoniecznie
odpowiada on czasowi, jaki upłynął od uruchomienia programu, ponieważ wiele
programów przez długi czas oczekuje na jakieś zdarzenie, a dopiero potem
wykorzystuje procesor. Ostatnia kolumna, COMMAND
, pokazuje
polecenie, którym uruchomiony został program.
ps(1) ma wiele rozmaitych opcji, które mają wpływ na wyświetlane
informacje. Jedną z najbardziej przydatnych kombinacji opcji jest
auxww
. Opcja a pokazuje informacje o wszystkich
działających procesach, również nie należących do nas. u
pokazuje nazwę użytkownika, do którego należy proces, jak również wykorzystanie pamięci.
x
pokazuje informacje o procesach - demonach.
Opcja ww
nakazuje, by polecenie ps(1) wyświetlało
pełną linię polecenia, nie obcinając jej, by zmieściła się na ekranie.
Informacje pokazywane przez top(1) wyglądają podobnie. Oto przykład:
%
top
last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10 47 processes: 1 running, 46 sleeping CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free Swap: 256M Total, 38M Used, 217M Free, 15% Inuse PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm 48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt ...
Informacje podzielone są na dwie części. Nagłówek (pierwsze pięć wierszy) zawiera PID ostatnio uruchomionego procesu, średnie obciążenie systemu (miara zapracowania systemu), czas działania systemu (od ostatniego uruchomienia) oraz aktualny czas. Inne liczby w nagłówku informują o liczbie działających procesów (w przykładzie 47), jak dużo pamięci i przestrzeni wymiany jest zajęte, oraz ile czasu system przebywa w różnych stanach procesora.
Pod nagłówkiem w kilku kolumnach pokazane są informacje zbliżone do przedstawianych przez ps(1). Podobnie można tu znaleźć PID procesu, nazwę użytkownika, czas zajmowania procesora, oraz polecenie, którym uruchomiono proces. top(1) pokazuje domyślnie także rozmiar pamięci zajmowanej przez proces. Ta ostatnia informacja podzielona jest na dwie kolumny; jedna odpowiada całkowitemu rozmiarowi, druga rozmiarowi rezydentnemu. Całkowity rozmiar oznacza, ile pamięci było potrzebne programowi, z kolei rozmiar rezydentny informuje, ile pamięci wykorzystuje program w danej chwili. W przykładzie widać, że Netscape(R) potrzebował prawie 30 MB pamięci RAM, jednak obecnie wykorzystuje tylko 9 MB.
top(1) automatycznie aktualizuje wyświetlane informacje co dwie
sekundy; można to zmienić opcją s
.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.