Proces to program, aplikacja lub komenda uruchomiona w systemie (wczytana do pamięci operacyjnej). To jednostką służąca do dostarczania zasobów systemowych. Proces tworzony jest w pamięci operacyjnej we własnej przestrzeni adresowej gdy program, aplikacja lub komenda jest zainicjalizowana. Procesy zorganizowane są hierarchicznie, każdy proces ma proces nadrzędny (wywołujący, ang. calling process) i może mieć wiele procesów potomnych (ang. child process), którym przekazuje wiele atrybutów w chwili utworzenia. Każdy proces posiada numer identyfikacyjny – identyfikator procesu – PID (process identifier), który jest używany przez jądro do zarządzania i kontroli jego cyklem życiowym. Gdy proces kończy swój cykl życiowy jest terminowany (zabijany), co jest raportowane do procesu nadrzędnego i wszystkie zasoby przyznane temu procesowi są uwalniane a PID jest usuwany.
Wiele procesów jest uruchamianych w czasie ładowania systemu. Takie procesy rezydują pamięci operacyjnej i oczekują na życzenie skorzystania z ich usług. Takie systemowe procesy uruchomione w tle nazywamy demonami (ang. daemons).
Wyświetlanie i monitorowanie procesów.
System operacyjny może mieć setki tysięcy uruchomionych w jednym czasie procesów. Procesy mogą być wyświetlane i monitorowane przez wiele narzędzi, m.in. przez ps, top i htop.
Komenda ps uruchomiona bez żadnych opcji wyświetla tylko listę procesów związanych z terminalem, na którym ta komenda jest wywoływana:
1 2 3 4 |
# ps PID TTY TIME CMD 411 pts/4 00:00:00 bash 13127 pts/4 00:00:00 ps |
Przykłady
Wszystkie procesy w systemie przy użyciu standardowej składni:
1 2 3 4 |
# ps -e # ps -ef # ps -eF # ps -ely |
Wszystkie procesy w systemie przy użyciu składni BSD:
1 2 |
# ps ax # ps axu |
Wyświetlenie drzewa procesów:
1 2 |
# ps -ejH # ps axjf |
Informacje o wątkach:
1 2 |
# ps -eLf # ps axms |
Informacje związane z bezpieczeństwem:
1 2 3 |
# ps -eo euser,ruser,suser,fuser,f,comm,label # ps axZ # ps -eM |
Aby zobaczyć wszystkie procesy uruchomione przez roota:
1 |
# ps -U root -u root u |
Wyświetlanie wszystkich procesów w zdefiniowanym przez siebie formacie:
1 2 3 |
# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm # ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm # ps -eopid,tt,user,fname,tmout,f,wchan |
Wyświetlenie tylko ID procesu syslogd:
1 |
# ps -C syslogd -o pid= |
Wyświetlenie nazwy procesu o PID 42:
1 |
# ps -p 42 -o comm= |
Wyjście polecenia ps standardowo rozbite jest na osiem kolumn, które pokazują dokładne informacje o każdym procesie uruchomionym w systemie.
Kolumna | Opis |
USER | ID użytkownika lub nazwa właściciela procesu. |
PID | ID procesu. |
PPID | ID procesu nadrzędnego. |
%CPU | Zużycie procesora przez proces. |
%MEM | Zużycie pamięci przez proces. |
TTY | Terminal, na którym został uruchomiony proces. “Console” oznacza konsolę systemową, “?” oznacza proces uruchomiony w tle. |
START | Data uruchomienia procesu. |
TIME | Łączny czas działania procesu, włączając czas w przestrzeni użytkownika i w przestrzeni jądra. |
COMMAND | Nazwa komendy uruchamiającej proces. |
Procesy uruchomione w tle nie mają żadnego powiązania z terminalem na liście procesów wyświetlanych przez ps, terminal (TTY) symbolizuje tutaj znak “?”. Im PID i PPID ma mniejszy numer ID tym wcześniej dany proces został uruchomiony. Proces z PID 0 uruchomiony został przy starcie systemu, po nim uruchomiony został proces z PID 1, itd. Informacje o każdym uruchomionym procesie składowane są w katalogu /proc, skąd dane do wyświetlenia pobierają programy takie jak ps.
Innym programem wyświetlającym dane o procesach jest top. Lepszą wersją tego programu jest htop, który uwzględnia rdzenie procesora wyświetlając procesy systemowe.
Stany, w których znajdują się procesy.
W czasie swojego cyklu życiowego proces wielokrotnie zmienia swój stan. O tym jak często proces zmienia swój stan decydują takie czynniki jak obciążenie procesora, dostępność pamięci, priorytet procesu, odpowiedź innych aplikacji.
Running (uruchomiony) – proces jest wykonywany przez CPU.
Sleeping (uśpiony) – proces oczekuje na dane wejściowe od użytkownika lub innego procesu.
Waiting (oczekiwanie) – proces otrzymał dane wejściowe, na które czekał, jest gotowy do uruchomienia jak tylko nadejdzie jego kolej.
Stopped (zatrzymany) – proces jest aktualnie zatrzymany i nie uruchomi się nawet jeżeli nadejdzie jego kolej, chyba że zostanie wysłany do niego sygnał, który zmieni jego zachowanie.
Zombi (defunct) – proces jest martwy, nie zużywa żadnych zasobów, jest utrzymywany w takim stanie do momentu, w którym proces nadrzędny go nie ubije.