19. december

Hvad laver min maskine?

Det kan ofte være rart at vide hvad ens maskine egentligt laver. Ofte af ren nysgerighed, ofte fordi man gerne vil vide om en et bestemt program kører (apache for eksempel) eller for at finde ud af hvilke programmer, der bruger alle ens resurser.

Til at opnå denne viden bruges ps(1) der er hovedemnet for denne julekalendergave. Vi vil også se på den interaktive version af ps, top(1).

I den simpleste form kan man kalde ps uden argumenter. Man vil så få vist hvilke processer der hører til det vindue man kalder ps fra. Dette vil oftest bare vise ens shell og selve ps-kommandoen:

$ ps
  PID TTY          TIME CMD
17529 pts/5    00:00:00 bash
17579 pts/5    00:00:00 ps
$

De informationer man får er processens identifikationsnummer, hvilken (pseudo-)terminal processen tilhører, hvor lang tid processen har brugt CPU'en og selve programnavnet.

ps har dog mange muligheder for at vælge ud hvilke processer der skal vises og hvilke informationer der skal vises. Det skal vi se på i det følgende. Desvære er flagene til ps ret rodet. Nogle flag skal have en enkelt streg foran, andre skal absolut ikke og en del flag findes kun i lang form med to streger foran et helt ord. Desvære betyder flaget U og flaget -U to forskellige ting, så hold tungen lige i munden.

Hvilke processer skal der vises information for?

Som sagt giver ps rig mulighed for at vælge hvilke processer der skal vises information for. Vil man se alle processer bruger man flaget -A, altså

$ ps -A
          

Med flaget a kan man finde alle processer der har en tilhørende terminal. Altså et sted hvor programmet kan skrive ud på

$ ps e

Det modsatte, altså at vise alle processer der ikke er tilknyttet en terminal kan findes med flaget x

$ ps x

Ofte er man interesseret i en mere præcis og fleksibel udvælgelse af processer. For eksempel kan man med flaget -C vælge processer ud efter hvilkem kommando processen udføre. Man kan altså vise alle apache processer med følgende linje:

$ ps -C apache

Eller vælge ud efter hvilken bruger der køre processen, dette gøres med U. Følgende viser altså hvilke processer jeg, makholm, kører:

$ ps U makholm

Man kan vælge bestemte processer ud hvis man kender deres PID med flaget -p:

$ ps -p 1

I alle de ovenstående tre måder at vælge processer på kan man angive flere muligheder. Dette gøres ved at adskille dem med kommaer (men ingen mellemrum). Det følgende vil altså vises processer der er ejet af enten makholm, guest eller mysql:

$ ps U makholm,guest,mysql

Hvis man angiver flere af ovenstående muligheder vil ps vise processer der bare overholder en af kriterierne. Det følgende vil altså vise både apache-processer og processer ejet af brugeren httpd:

$ ps -C apache U httpd

ps giver en række flere muligheder, men det vil være for langt at komme ind på dem alle her. De kan dog findes i manualside.

Hvad skal vises?

De informationer som ps viser som standard er ofte ikke altid nok. Nogle gode ekstra informationer kan man få ved at kalde ps med flaget -f:

$ ps -f        
UID        PID  PPID  C STIME TTY          TIME CMD
makholm  17643 17641  0 22:34 pts/6    00:00:00 bash
makholm  18013 17643  0 23:22 pts/6    00:00:00 ps -f
$

De ekstra informationer er hvilken bruger processen ejes af (USER), forældreprocessend identifikationsnummer (PPID) og hvornår processen er begyndt (STIME).

ps giver også mulighed for selv at angive hvilke felter man er interesseret i. Dette gøres med flaget -o. Der er utroligt mange ting man kan få vist, og det vil være for langt at komme ind på det her. Følgende vil dog give cirka samme uddata som ps -f (bortset fra C-søjlen, jeg ikke ved hvad betyder):

$ ps -o user,pid,ppid,stime,tty,time,cmd

Manualen til ps er ikke særlig god. Hvis man ikke ved hvad et bestemt felt betyder er manualen ikke til nogen hjælp, men hvis man har en ide om hvilken information man leder efter, kan man være heldig at finde det rigtige felt.

top(1) - en interaktiv udgave af ps

Hvis man vil følge med i hvordan bruges kan man bruge top. top viser maskinens oppetid, hvor belastet CPU'en er og hvor meget ram og swap der bliver brugt. Derefter er der en liste over processer ligende dem ps laver.

Man kan vælge hvordan processerne skal sorteres ved bare at trykke en af følgende taster:

N
Sorter efter PID.
A
Sorter efter processens alder.
P
Sorter efter hvor meget processorkraft processen bruger.
M
Sorter efter hvor meget hukkomelse processen bruger
T
Sorter efter hvor meget CPU-tid processen har brugt siden den startede

Desuden kan man vælge at kun se processer tilhørende en enkelt bruger ved at trykke u.