LX-INL-INFO-processen
Updated aug/8/2010 09:22

processen

nuttige links:
inhoudstafel: snelkoppelingen
get to know linux ps command:
http://www.ghacks.net/2009/07/01/get-to-know-linux-ps-command/
top command examples:
http://www.thegeekstuff.com/2010/01/15-practical-unix-linux-top-command-examples/

Process administratie is niet moeilijk in Linux. We gebruiken process administratie vooral om te zien of een bepaalde service wel degelijk draait, en verder vooral om zich misdragende processen te beëindigen. Er zijn een 5 tal nuttige commando's.

  1. ps

    Het meest gebruikte commando is ps
    ps wordt dikwijls gebruikt in combinatie met de switch -A: alle processen op je computer rollen over je scherm.

    bert@phaedra ~ $ ps -A

      PID TTY          TIME CMD
        1 ?        00:00:01 init
        2 ?        00:00:00 kthreadd
        3 ?        00:00:00 migration/0
        4 ?        00:00:00 ksoftirqd/0
        5 ?        00:00:00 watchdog/0
        6 ?        00:00:00 migration/1
        7 ?        00:00:00 ksoftirqd/1
        8 ?        00:00:00 watchdog/1
        9 ?        00:00:01 events/0
       10 ?        00:00:02 events/1
       11 ?        00:00:00 khelper
       47 ?        00:00:00 kblockd/0
       48 ?        00:00:00 kblockd/1
       51 ?        00:00:00 kacpid
       52 ?        00:00:00 kacpi_notify
      131 ?        00:00:00 kseriod
      165 ?        00:00:00 pdflush
      166 ?        00:00:02 pdflush
      167 ?        00:00:00 kswapd0
     4885 tty4     00:00:00 getty
     4888 tty2     00:00:00 getty
     4890 tty3     00:00:00 getty
     4892 tty6     00:00:00 getty
     5081 ?        00:00:00 acpid
     5116 ?        00:00:00 kondemand/0
     5117 ?        00:00:00 kondemand/1
     6068 ?        00:00:00 krfcommd
     6140 ?        00:00:00 atd
     6160 ?        00:00:00 cron
     6193 ?        00:00:04 apache2
     6280 tty1     00:00:00 getty
     6449 ?        00:00:00 esd
     6737 ?        00:00:00 cifsoplockd
     6738 ?        00:00:00 cifsdnotifyd
     6746 ?        00:00:00 cifsd
     6748 ?        00:00:00 cifsd
    ..........................................> ingekort <........
    12199 ?        00:00:07 dirmngr
    15052 ?        00:00:08 mintMenu
    15055 ?        00:00:00 trashapplet
    15299 ?        00:00:00 gvfsd-computer
    15308 ?        00:00:00 cifsd
    16317 ?        00:00:02 gnome-terminal
    16320 ?        00:00:00 gnome-pty-helpe
    16321 pts/0    00:00:00 bash
    16363 ?        00:00:00 firefox
    16366 ?        00:00:00 run-mozilla.sh
    16370 ?        00:03:52 firefox-bin
    16912 pts/0    00:00:00 ps


    De eerste kolom is de Process IDentifier. Hiermee identificeren we elk apart process.
    In de tweede kolom staat de naam van de terminal die het process heeft opgestart. Veel processen worden door andere processen opgestart en hebben dan ook geen TTY.
    De derde kolom geeft de gerbuikte cpu tijd weer en de vierde en laatste kolom de commandonaam.

    We kunnen de output van ps -A focussen door een pipe naar grep:

    bert@phaedra ~ $ ps -A | grep gnome

    14831 ?        00:00:00 gnome-keyring-d
    14946 ?        00:00:01 gnome-settings-
    14961 ?        00:00:06 gnome-panel
    14969 ?        00:00:05 gnome-screensav
    14997 ?        00:02:48 gnome-do
    15005 ?        00:00:00 gnome-power-man
    16317 ?        00:00:02 gnome-terminal
    16320 ?        00:00:00 gnome-pty-helpe

  2. kill

    We kunnen processen in de terminal stoppen met CTRL-C. Dit werkt meestal. Maar niet altijd. Bovendien worden veel processen grafisch opgestart met een muisklik, en CTRL-C is dan niet mogelijk.

    Indien een process lelijk doet kun je gebruik maken van het commando kill om het process te beeindigen.

    kill wordt gevolgd door het PID van het process dat we willen beëindigen.
    We kunnen alleen processen 'killen' waar we zelf eigenaar van zijn.

    16942 ?        00:00:00 gnome-terminal
    16945 ?        00:00:00 gnome-pty-helpe
    16946 pts/0    00:00:00 bash
    16958 pts/0    00:00:00 ps

    bert@phaedra ~ $ kill 16946

    Zonder optie stuurt kill een zogenaamde TERM (terminate) naar de kernel (signal 15).

    Maar soms is dit niet voldoende om een process te stoppen,
    en in dat laatste geval kunnen we de optie -9 toevoegen.
    De optie -9 staat voor KILL (signal 9).

    Uitgevoerd als root is dit een sterk wapen tegen CPU of MEMORY misbruikers.

    bert@phaedra ~ $ kill -9 16946
  3. killall

    Met killall beëindig je alle processen met dezelfde commandonaam. Nadeel van killall is dat je eerst de naam van het process moet kennen eer je het kunt beëindigen. Tweede nadeel is dat je alle processen met die naam vernietigt.

    bert@phaedra ~ $ killall gnome-terminal
  4. xkill

    xkill vernietigt grafische toepassingen met een killer-cursor. Pas op, dit commando vernietigt desgewenst ook taakbalken, klokken enzomeer.
  5. top

    Het commando top geeft een dynamisch beeld van de processen gerangschikt op cpu gebruik.

    $ top

    top - 13:10:10 up 3 days, 22:18,  3 users,  load average: 0.33, 0.35, 0.21
    Tasks: 161 total,   1 running, 160 sleeping,   0 stopped,   0 zombie
    Cpu(s):  2.0%us,  1.3%sy,  0.0%ni, 96.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   2595140k total,   955504k used,  1639636k free,      276k buffers
    Swap:  4883752k total,        0k used,  4883752k free,   526988k cached

      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                          
    16370 bert      20   0  286m 106m  22m S    1  4.2   0:52.24 firefox-bin                      
    16452 root      20   0  2308 1148  852 R    1  0.0   0:00.22 top                              
    14797 root      20   0  117m  23m 9700 S    0  0.9   2:01.36 Xorg                             
        1 root      20   0  1812  832  608 S    0  0.0   0:01.38 init                             
        2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd                         
        3 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/0                      
        4 root      15  -5     0    0    0 S    0  0.0   0:00.10 ksoftirqd/0                      
        5 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/0                       
        6 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/1                      
        7 root      15  -5     0    0    0 S    0  0.0   0:00.04 ksoftirqd/1                      
        8 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/1                       
        9 root      15  -5     0    0    0 S    0  0.0   0:01.48 events/0                         
       10 root      15  -5     0    0    0 S    0  0.0   0:02.04 events/1                         
       11 root      15  -5     0    0    0 S    0  0.0   0:00.00 khelper                          
       47 root      15  -5     0    0    0 S    0  0.0   0:00.06 kblockd/0                        
       48 root      15  -5     0    0    0 S    0  0.0   0:00.04 kblockd/1                        
       51 root      15  -5     0    0    0 S    0  0.0   0:00.00 kacpid                           
       52 root      15  -5     0    0    0 S    0  0.0   0:00.00 kacpi_notify                     
      131 root      15  -5     0    0    0 S    0  0.0   0:00.00 kseriod                          
      165 root      20   0     0    0    0 S    0  0.0   0:00.00 pdflush

    Je kan top verlaten met de letter Q.
    In top kun je een process be-eindigen door de letter K in te tikken, daarna het PID, en zonodig het cijfer 9 voor een KILL.
    Voor meer mogelijkheden kan je hulp opvragen met H.

    Bovenaan top zien we statistieken van het systeem: tijd, uptime, aantal ingelogde gebruikers, belasting van het systeem (load average), aantal draaiende processen (tasks), cpu, memory en swap gebruik.

    Daaronder vind je de processen die draaien op het systeem geordend in 11 kolommen:

    PID
    Process ID: het nummer (1 tot 65535) dat elk uniek proces identificeert
    USER
    de gebruiker die eigenaar is van het process
    PRI
    de "priority" zoals ingesteld door de kernel. Normaal gezien een waarde tussen 0 en 100; RT betekent real-time
    NI
    de "nice value" van een process; dit is een waarde van -20 tot +19 waar -20 de hoogste prioriteit is. Met de nice value wordt de actuele prioriteit door de user bijgeregeld
    VIRT
    het totaal aantal virtueel geheugen (physiek RAM + SWAP) dat door het process wordt gebruikt
    RES
    (resident) het gedeelte physiek RAM dat door een proces wordt gebruikt
    SHR
    (share) stuk gebruikt geheugen dat door andere processen kan worden gebruikt
    S
    Process Status: 'D' = uninterruptible sleep - 'R' = running - 'S' = sleeping -  'T' = traced or stopped - 'Z' = zombie
    %CPU
    percentage cpu gebruik
    %MEM
    percentage geheugen gebruik
    TIME+
    tot hiertoe gebruikte cpu tijd
    COMMAND
    het ingetikte commando


    addendum: NICE and PRIORITY (voor de bollebozen)
    As of Linux v2.6, the kernel uses internally 140 priorities for the scheduling (referred in the sequel as scheduling priority), ranging from 1 to 140. The kernel selects the KSE with the lowest priority to run first. Note that these priorities are only known by the kernel. The relationship with priority / nice value as defined by POSIX is given below.

    Real-time KSE have a scheduling priority ranging from 1 to 99. The relationship with POSIX priority is 100-p, where p is the priority as defined by POSIX. In other words, a KSE with the lowest POSIX priority (1 on linux) has a scheduling priority of 99 and the KSE with the highest POSIX priority (99 on Linux) has a scheduling priority of 1.

    Non real-time KSE maps linearly from 100 to 140 depending on the nice value following the formula 120+n, where n is the nice value (the nice value is comprised between -20 and 19 on Linux). In other words, a traditional KSE with a default nice value of 0 has a scheduling priority of 120.

    Note that the priority of a non-real time KSE is dynamically adjusted using a heuristic that includes, among other, the nice value and the current KSE activity. On the other hand, the priority of a real-time KSE is never adjusted dynamically by the kernel. This assures that a real-time KSE always preempts a non-real time one.

    More information about scheduling for Linux kernel v2.6 might be found in the excellent book from Robert Love "Linux Kernel Development", par.3 pp31-5, ISBN 0-672-32512-8.