PROCPS_PIDS(3) Library Functions Manual PROCPS_PIDS(3) NAMN procps_pids -- API for att hamta ut processinformation i filsystemet /proc SYNOPSIS #include int procps_pids_new (struct pids_info **info, enum pids_item *element, int antalelement); int procps_pids_ref (struct pids_info *info); int procps_pids_unref (struct pids_info **info); struct pids_stack *procps_pids_get ( struct pids_info *info, enum pids_fetch_type vilken); struct pids_fetch *procps_pids_reap ( struct pids_info *info, enum pids_fetch_type vilken); struct pids_fetch *procps_pids_select ( struct pids_info *info, unsigned *dessa, int antaldessa, enum pids_select_type vilken); struct pids_stack **procps_pids_sort ( struct pids_info *info, struct pids_stack *stackar[], int antalstackade, enum pids_item sortelement, enum pids_sort_order ordning); int procps_pids_reset ( struct pids_info *info, enum pids_item *nyaelement, int nyaantalelement); struct pids_stack *fatal_proc_unmounted ( struct pids_info *info, int returnera_sjalv); Lanka med -lproc2. BESKRIVNING Oversikt Centralt for detta granssnitt ar en enkel "resultat"-post som avspeglar ett "element" plus dess varde (i en union med standardtyper i spraket C som medlemmar). Alla "resultat"-poster allokeras automatiskt och tillhandahalls av biblioteket. Genom att ange en vektor av "element" kan dessa strukturer organiseras som en "stack", som potentiellt ger manga resultat med ett enda funktionsanrop. Alltsa kan en "stack" ses som en post med variabel langd vars innehall och ordning helt avgors av anvandaren. Som en del av detta granssnitt finns det tva unika uppraknare. Elementen "noop" och "extra" finns for att halla anvandarvarden. De satts aldrig av biblioteket, men "extra"-resultatet kommer nollstallas vid varje biblioteksinteraktion. Filen pids.h kommer vara ett avgorande dokument under anvandarens utveckling av program. Dar hittar man tillgangliga element, deras returtyp (medlemsnamnen i posten "resultat") och kallan for sadana varden. Ytterligare uppraknare och poster dokumenteras ocksa dar. Anvandning Foljande skulle vara en typisk anropssekvens till detta granssnitt. 1. fatal_proc_unmounted() 2. procps_pids_new() 3. procps_pids_get(), procps_pids_reap() eller procps_pids_select() 4. procps_pids_unref() Funktionen get ar en iterator for succesiva PID:n/TID:n, och returnerar dessa "element" som tidigare identifierats via new eller reset. Tva funktioner stodjer oforutsagbara variabla utfall. Funktionen reap samlar dat for alla processer medan funktionen select arbetar med specifikaPID:er eller UID:er. Bada kan returnera flera "stackar" som var och en innehaller multipla "resultat"-poster. Om onskas kan en anvandare valja att sort sadana resultat For att anvanda nagon "stack", och komma at individuella "resultat"-poster, kravs en relativ_upprakning som visas i makrot VAL definierat i huvudfilen. Sadana varden skulle kunna hardkodas som: 0 till antalelement-1. Dock uppfylls detta behov typiskt genom att skapa ens egna uppraknare motsvarande ordningen i vektorn av "element". Forbehall API:et skiljer sig fran andra genom att de intressanta elementen maste anges vid tidpunkten for new eller reset, dar den senare ar unik for detta API. Om antingen parametern element eller antalelement ar noll vid tidpunkten for new blir reset obligatorisk fore man gor nagot annat anrop. Annars skall procps_pids_reset() endast anropas nar ordningen eller antalet element i stacken andras. For funktionerna new och unref maste adressen till en info-postpekare ges. Med new maste den ha initierats till NULL. Med unref kommer den aterstallas till NULL om referensraknaren nar noll. Funktionerna get och reap anvander parametern vilken for att ange huruvida endast uppgifter eller bade uppgifter och tradar skall hamtas. Funktionen select behover en vektor av PID:er eller UID:er som dessa tillsammans med antaldessa for att identifera vilka processer som skall hamtas. Denna funktion arbetar sedan som en delmangd av reap. Nar man anvander funktionen sort skall parametrarna stackar och antalstackade normalt vara de som returneras i posten "pids_fetch". Slutligen kan funktion fatal_proc_unmounted anropas fore nagon annan funktion for att sakerstalla att katalogen /proc/ ar monterad. Darmed skall parametern info vara NULL och parametern returnera_sjalv vara noll. Om, daremot, nagra element onskas av det anropande programmet (en returnera_sjalv nagot annat an noll) da maste anropet av new forega det for att identfiera elementen och hamta den onskade info-pekaren. RETURVARDE Funktioner som returnerar en "int" Ett fel kommer indikera ett negativt tal som alltid ar inversen av nagot kant varde fran errno.h. Lyckat resultat markeras med ett returvarde av noll. Dock returnerar funktionerna ref och unref det aktuella vardet pa referensraknaren for info-posten. Funktioner som returnerar en "adress" Ett fel kommer indikeras av en NULL-returpekare och orsaken gar att hitta i dett formella errno-vardet. Lyckat resultat indikeras av en pekare pa den namngivna posten. Dock, om man overlever anropet av fatal_proc_unmounted kommer NULL alltid returneras nar returnera_sjalv ar noll. FELSOKNING For att hjalpa till med programutveckling finns det tva metoder i procps-ng som kan anvandas. Den forsta ar en levererad fil med namnet "libproc.supp" som kan vara anvandbar nar man utvecklar ett multitradat program. Nar den anvands med flaggan "--suppressions=" till valgrind undviks varningar som hor ihop med biblioteket procps sjalvt. Sadana varningar uppstar for att biblioteket hanterar heap-baserade allokeringar pa ett tradsakert satt. Ett enkeltradat program kommer inte att fa dessa varningar. Den andra metoden kan hjalpa till att sakerstalla att medlemsreferenser i "resultat" stammer overens med bibliotekets forvantningar. Den raknar med att ett tillhandahallet makro i huvuddfilen anvands for att komma at "resultat"-vardet. Denna funktion kan aktiveras genom nagon av de foljande metoderna och eventuella avvikelser kommer att skrivas till standard fel. 1) Lagg till CFLAGS='-DXTRA_PROCPS_DEBUG' till eventuella andra flaggor till ./configure som ditt projekt kan tankas anvanda. 2) Lagg till #include till varje program efter raden #include . Denna verifieringsfunktion orsakar en vasentlig kostnad. Darfor ar det viktigt att den inte ar aktiverad for produktions-/utgavebyggen. MILJOVARIABLER Vardet som satts pa foljande ar oviktigt, bara att den finns. LIBPROC_HIDE_KERNEL Detta kommer dolja karntradar som annars skulle returnera med ett anrop av procps_pids_get, procps_pids_select eller procps_pids_reap. SE AVEN procps(3), procps_misc(3), proc(5). procps-ng 2004-09-03 PROCPS_PIDS(3)