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 też
[edytuj]