Linux/Procesy

Z Wikibooks, biblioteki wolnych podręczników.

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]


  1. linux journal: how-kill-zombie-processes-linux by Nawaz Abbasi on October 8, 2020