Linux/Procesy
Z systemami unixowymi związane jest pojęcie procesu. W takim ujęciu proces rozumiany jest jako wykonywany w systemie program.
Atrybuty procesu
[edytuj]Każdy proces charakteryzuje się pewnymi atrybutami :
- przestrzeń adresowa,
- licznik programu,
- licznik stanu,
- licznik rejestru,
- deskryptory pliku (unikalny identyfikator pliku wykorzystywany przez system operacyjny)
- dane procesu
- zależności rodzinne
- liczniki statyczne
Stany procesu
[edytuj]Wynikiem obecności w systemie procesów jest to, że jądro systemu może nim sterować tak i może go ustawić w kilku stanach :
- pracujący w trybie użytkownika (proces znajduje się na procesorze i wykonuje kod),
- pracujący w trybie jądra (jądro wykonuje wywołanie systemowe, wykonane przez proces)
- uśpiony (proces czeka na jakieś zdarzenie, np. na odczyt danych z dysku lub otrzymanie danych z sieci)
- gotowy do wykonania (może być uruchomiony w każdej chwili, jednak nie ma jeszcze przydzielonego procesora)
- zombie lub dead lub defunct (proces zakończył działanie i czeka na odebranie kodu powrotu przez proces macierzysty),
znaleźć zombie proces:[1]
ps aux | egrep "Z|defunct"
Zarządzanie procesami
[edytuj]initctl
[edytuj]initctl list
otrzymujemy :
unicast-local-avahi stop/waiting update-notifier-crash stop/waiting update-notifier-hp-firmware stop/waiting xsession-init stop/waiting dbus start/running, process 1577 update-notifier-cds stop/waiting gnome-session start/running, process 1625 ssh-agent start/running unity7 stop/waiting upstart-dbus-session-bridge start/running, process 1597 logrotate stop/waiting unity-panel-service start/running, process 1630 hud start/running, process 1621 im-config start/running unity-gtk-module stop/waiting upstart-dbus-system-bridge start/running, process 1601 at-spi2-registryd start/running, process 1624 update-notifier-release stop/waiting upstart-file-bridge start/running, process 1599 gnome-settings-daemon start/running, process 1617 window-stack-bridge start/running, process 1585 re-exec stop/waiting upstart-event-bridge start/running, process 1583
lub :
initctl show-config
dokumentacja :
man initcl
pstree
[edytuj]Wyświetla drzewo procesów :
init─┬─NetworkManager─┬─dhclient │ ├─dnsmasq │ └─3*[{NetworkManager}] ├─accounts-daemon───2*[{accounts-daemon}] ├─acpid ├─apache2───2*[apache2───26*[{apache2}]] ├─avahi-daemon───avahi-daemon ├─bluetoothd ├─colord───2*[{colord}] ├─cron ├─cups-browsed ├─cupsd───dbus ├─dbus-daemon ├─6*[getty] ├─irqbalance ├─lightdm─┬─Xorg │ ├─lightdm─┬─init─┬─at-spi-bus-laun─┬─dbus-daemon │ │ │ │ └─3*[{at-spi-bus-laun}] │ │ │ ├─at-spi2-registr───{at-spi2-registr} │ │ │ ├─bamfdaemon───3*[{bamfdaemon}] │ │ │ ├─chromium-browse─┬─chrome-sandbox───chromium-browse───chromium-browse───42*[chromium-browse───8*[{chromium-browse}]] │ │ │ │ ├─chromium-browse │ │ │ │ ├─chromium-browse─┬─chromium-browse │ │ │ │ │ └─3*[{chromium-browse}] │ │ │ │ ├─2*[chromium-browse───3*[{chromium-browse}]] │ │ │ │ ├─chromium-browse───13*[{chromium-browse}] │ │ │ │ └─48*[{chromium-browse}] │ │ │ ├─dbus-daemon │ │ │ ├─dconf-service───2*[{dconf-service}] │ │ │ ├─evolution-calen───4*[{evolution-calen}] │ │ │ ├─evolution-sourc───2*[{evolution-sourc}] │ │ │ ├─gconfd-2 │ │ │ ├─gedit─┬─bash │ │ │ │ ├─gnome-pty-helpe │ │ │ │ └─12*[{gedit}] │ │ │ ├─gnome-keyring-d───5*[{gnome-keyring-d}] │ │ │ ├─gnome-screensav───3*[{gnome-screensav}] │ │ │ ├─gnome-session─┬─compiz─┬─sh───gtk-window-deco───2*[{gtk-window-deco}] │ │ │ │ │ └─11*[{compiz}] │ │ │ │ ├─deja-dup-monito───2*[{deja-dup-monito}] │ │ │ │ ├─gnome-fallback-───2*[{gnome-fallback-}] │ │ │ │ ├─indicator-multi───2*[{indicator-multi}] │ │ │ │ ├─nautilus───4*[{nautilus}] │ │ │ │ ├─nm-applet───2*[{nm-applet}] │ │ │ │ ├─polkit-gnome-au───2*[{polkit-gnome-au}] │ │ │ │ ├─telepathy-indic───2*[{telepathy-indic}] │ │ │ │ ├─update-notifier───3*[{update-notifier}] │ │ │ │ └─3*[{gnome-session}] │ │ │ ├─gnome-settings-───3*[{gnome-settings-}] │ │ │ ├─gnome-terminal─┬─bash───pstree │ │ │ │ ├─gnome-pty-helpe │ │ │ │ └─3*[{gnome-terminal}] │ │ │ ├─gvfs-afc-volume───2*[{gvfs-afc-volume}] │ │ │ ├─gvfs-gphoto2-vo───{gvfs-gphoto2-vo} │ │ │ ├─gvfs-mtp-volume───{gvfs-mtp-volume} │ │ │ ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}] │ │ │ ├─gvfsd───{gvfsd} │ │ │ ├─gvfsd-burn───{gvfsd-burn} │ │ │ ├─gvfsd-fuse───4*[{gvfsd-fuse}] │ │ │ ├─gvfsd-metadata───{gvfsd-metadata} │ │ │ ├─gvfsd-trash───2*[{gvfsd-trash}] │ │ │ ├─hud-service───2*[{hud-service}] │ │ │ ├─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}] │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engine-sim}] │ │ │ │ ├─ibus-ui-gtk3───3*[{ibus-ui-gtk3}] │ │ │ │ └─2*[{ibus-daemon}] │ │ │ ├─ibus-x11───3*[{ibus-x11}] │ │ │ ├─indicator-appli───{indicator-appli} │ │ │ ├─indicator-bluet───2*[{indicator-bluet}] │ │ │ ├─indicator-datet───4*[{indicator-datet}] │ │ │ ├─indicator-keybo───2*[{indicator-keybo}] │ │ │ ├─indicator-messa───3*[{indicator-messa}] │ │ │ ├─indicator-power───2*[{indicator-power}] │ │ │ ├─indicator-print───2*[{indicator-print}] │ │ │ ├─indicator-sessi───2*[{indicator-sessi}] │ │ │ ├─indicator-sound───2*[{indicator-sound}] │ │ │ ├─indicator-sync-───{indicator-sync-} │ │ │ ├─notify-osd───2*[{notify-osd}] │ │ │ ├─pulseaudio───3*[{pulseaudio}] │ │ │ ├─ssh-agent │ │ │ ├─ubuntuone-syncd───4*[{ubuntuone-syncd}] │ │ │ ├─unity-panel-ser───2*[{unity-panel-ser}] │ │ │ ├─unity-webapps-s───2*[{unity-webapps-s}] │ │ │ ├─2*[upstart-dbus-br] │ │ │ ├─upstart-event-b │ │ │ ├─upstart-file-br │ │ │ ├─window-stack-br │ │ │ ├─wxmaxima─┬─sbcl │ │ │ │ └─3*[{wxmaxima}] │ │ │ ├─zeitgeist-daemo───{zeitgeist-daemo} │ │ │ ├─zeitgeist-datah───10*[{zeitgeist-datah}] │ │ │ └─zeitgeist-fts─┬─cat │ │ │ └─{zeitgeist-fts} │ │ └─{lightdm} │ └─2*[{lightdm}] ├─modem-manager ├─nmbd ├─polkitd───2*[{polkitd}] ├─rsyslogd───3*[{rsyslogd}] ├─rtkit-daemon───2*[{rtkit-daemon}] ├─smbd───smbd ├─sshd ├─systemd-logind ├─systemd-udevd ├─udisksd───4*[{udisksd}] ├─upowerd───2*[{upowerd}] ├─upstart-file-br ├─upstart-socket- ├─upstart-udev-br └─whoopsie───2*[{whoopsie}]
ps
[edytuj]Podstawowym poleceniem do zarządzania procesami przez użytkownika jest : ps
ps [-] [lujsvmaxscewhrnu] [txx] [0 [+/-] k1 [[+/-] k2 …]] [pids]
Opcje :
- l - długi format
- u - format użytkownika podaje nazwę użytkownika czas start
- m - wyświetla informacje o pamięci
- f - format drzewiasty
- a - pokaż także procesy innych użytkowników
- r - tylko pracujące procesy
PID TTY TIME CMD 1157 tty2 00:00:13 bash 1720 tty2 00:00:00 ps
np.
- ps –ax – wyświetla wszystkie procesy
- pstree – wyświetla drzewo procesu w systemie
Aby zobaczyć wszystkie procesy w systemie, używając standardowej składni:
- ps -e
- ps -ef
- ps -eF
- ps -ely
Aby wypisać drzewo procesów:
- ps -ejH
- ps axjf
Aby wyświetlić informację o wątkach:
- ps -eLf
- ps axms
Aby wyświetlić informacje związane z bezpieczeństwem:
- ps -eo euser,ruser,suser,fuser,f,comm,label
- ps axZ
- ps -eM
Aby zobaczyć wszystkie procesy poza tymi działającymi jako root(rzeczywiste i efektywne ID):
- ps -U root -u root -N
Aby wyświetlić wszystkie procesy w formacie zdefiniowanym przez użytkownika:
- 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
- PID – identyfikator procesu
- TTY – terminal
- TIME – łączny czas procesora w formacie dd-hh:mm:ss
- CMD - polecenie (wraz z parametrami), które spowodowało uruchomienie procesu
- USER – identyfikator użytkownika będącego właścicielem procesu
- % CPU – procentowe zużycie procesora przez proces
- % MEM – procent użycia pamięci operacyjnej przez czas
- VS2 - rzeczywisty rozmiar procesu w kilobajtach
- RSS - ilość fizycznej pamięci używanej przez proces
- STAT – status procesu
- START - czas uruchomienia procesu
kill
[edytuj]W wielu przypadkach zachodzi potrzeba usunięcie przez użytkownika procesu z systemu UNIX. Użytkownik ma takie prawo w stosunku do swoich procesów natomiast użytkownik root do wszystkich.
Polecenia do tego służące mają następującą składnię :
kill [-s sygnał /-p] [-a] pid …
np.
Pozwala ono wysyłać sygnały do procesów (można używać nazw sygnałów lub ich numerów):
- kill -l - wyświetla dopuszczalne nazwy sygnałów
- kill -kill 1234 - wysłanie sygnału SIGKILL do procesu z pid=1234
- kill -9 1234 - to samo wyżej, bo SIGKILL ma nr 9
- kill -int 1234 - wysłanie sygnału SIGINT do procesu z pid=1234
- kill -2 1234 - to samo wyżej, bo SIGINT ma nr 2
Można wysyłać sygnał do większej liczby procesów np :
- kill -kill 0 - wysyła sygnał do wszystkich procesów w grupie procesów procesu wysyłającego
- kill -kill 1234 1235 - do dwóch procesów o podanych pid-ach
Inne przykłady :
- kill -9 8606
- kill -0 8606
- killall –KILL tree - zakończenie procesu
- killall –HnP tree – restart procesu
- kill <PID> - wysyłanie sygnału TERM do procesu o numerze identyfikacyjnym PID
- Kill - <nr sygnału> <PID> -wysyłanie wskazanego procesu sygnału o podanym numerze
- kill – l – zwraca nazwy i numer sygnałów kill – l <nr sygnału> - zwraca nazwę sygnału o podanym numerze
- kill -9-1 - Zabicie wszystkich procesów, które można zabić
Proces o PID= -1 oznacza wszystkie procesy które wolno zabić poza procesem kill
killall :
- -g - Zabija grupę procesów, do której należy podany proces
- -i - Pyta o zgodę przed zabiciem każdego procesu
- –v - Wypisuje komunikat o każdym udanym wysłaniu sygnału
- –w - Czeka aż zabite zostaną wszystkie wskazane procesy. Może czekać bez końca jeśli proces zignorował sygnał lub przeszedł do stanu zombie np.
killall –v mozilla
Zobacz również
[edytuj]