plucky (3) procps_pids.3.gz

Provided by: procps_4.0.4-4ubuntu5_amd64 bug

NAME

       procps_pids - API to access process information in the /proc filesystem

SYNOPSIS

       #include <libproc2/pids.h>

       int procps_pids_new   (struct pids_info **info, enum pids_item *items, int numitems);
       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 which);

       struct pids_fetch *procps_pids_reap (
           struct pids_info *info,
           enum pids_fetch_type which);

       struct pids_fetch *procps_pids_select (
           struct pids_info *info,
           unsigned *these,
           int numthese,
           enum pids_select_type which);

       struct pids_stack **procps_pids_sort (
           struct pids_info *info,
           struct pids_stack *stacks[],
           int numstacked,
           enum pids_item sortitem,
           enum pids_sort_order order);

       int procps_pids_reset (
           struct pids_info *info,
           enum pids_item *newitems,
           int newnumitems);

       struct pids_stack *fatal_proc_unmounted (
           struct pids_info *info,
           int return_self);

       Link with -lproc2.

DESCRIPTION

   Overview
       Central  to this interface is a simple `result' structure reflecting an `item' plus its value (in a union
       with standard C language types as members).  All `result'  structures  are  automatically  allocated  and
       provided by the library.

       By  specifying  an array of `items', these structures can be organized as a `stack', potentially yielding
       many results with a single function call.  Thus, a `stack' can be viewed  as  a  variable  length  record
       whose content and order is determined solely by the user.

       As  part  of this interface there are two unique enumerators.  The `noop' and `extra' items exist to hold
       user values.  They are never set by the library, but the `extra' result will be zeroed with each  library
       interaction.

       The  pids.h  file  will  be  an  essential document during user program development.  There you will find
       available items, their return type (the `result' struct member name) and  the  source  for  such  values.
       Additional enumerators and structures are also documented there.

   Usage
       The following would be a typical sequence of calls to this interface.

       1. fatal_proc_unmounted()
       2. procps_pids_new()
       3. procps_pids_get(), procps_pids_reap() or procps_pids_select()
       4. procps_pids_unref()

       The  get  function is an iterator for successive PIDs/TIDs, returning those `items' previously identified
       via new or reset.

       Two functions support unpredictable variable outcomes.  The reap function gathers data for all  processes
       while  the  select  function  deals  with  specific PIDs or UIDs.  Both can return multiple `stacks' each
       containing multiple `result' structures.  Optionally, a user may choose to sort such results

       To exploit any `stack', and access individual `result' structures, a relative_enum is required  as  shown
       in  the  VAL macro defined in the header file.  Such values could be hard coded as: 0 through numitems-1.
       However, this need is typically satisfied by creating your own enumerators corresponding to the order  of
       the `items' array.

   Caveats
       The <pids> API differs from others in that those items of interest must be provided at new or reset time,
       the latter being unique to this API.  If either the items or numitems parameter is zero at new time, then
       reset becomes mandatory before issuing any other call.

       For  the  new  and  unref functions, the address of an info struct pointer must be supplied.  With new it
       must have been initialized to NULL.  With unref it will be reset to NULL if the reference  count  reaches
       zero.

       The  get  and  reap  functions  use  the  which parameter to specify whether just tasks or both tasks and
       threads are to be fetched.

       The select function requires an array of PIDs or UIDs as these along  with  numthese  to  identify  which
       processes are to be fetched.  This function then operates as a subset of reap.

       When  using  the  sort function, the parameters stacks and numstacked would normally be those returned in
       the `pids_fetch' structure.

       Lastly, a fatal_proc_unmounted function may be called before any other function to ensure that the /proc/
       directory is mounted.  As such, the info parameter would be NULL and the return_self parameter zero.  If,
       however, some items are desired for the issuing program (a return_self other than zero) then the new call
       must precede it to identify the items and obtain the required info pointer.

RETURN VALUE

   Functions Returning an `int'
       An  error  will  be  indicated by a negative number that is always the inverse of some well known errno.h
       value.

       Success is indicated by a zero return value.  However, the ref and unref  functions  return  the  current
       info structure reference count.

   Functions Returning an `address'
       An error will be indicated by a NULL return pointer with the reason found in the formal errno value.

       Success   is   indicated   by   a  pointer  to  the  named  structure.   However,  if  one  survives  the
       fatal_proc_unmounted call, NULL is always returned when return_self is zero.

DEBUGGING

       To aid in program development, there are two procps-ng provisions that can be exploited.

       The first is a supplied file named `libproc.supp' which may be useful when  developing  a  multi-threaded
       application.   When  used with the valgrind `--suppressions=' option, warnings associated with the procps
       library itself are avoided.

       Such warnings arise because the library handles heap  based  allocations  in  a  thread-safe  manner.   A
       single-threaded application will not receive those warnings.

       The  second  provision  can  help  ensure `result' member references agree with library expectations.  It
       assumes that a supplied macro in the header file is used to access the `result' value.

       This feature can be activated through either of the following  methods  and  any  discrepancies  will  be
       written to stderr.

       1) Add CFLAGS='-DXTRA_PROCPS_DEBUG' to any other ./configure options your project may employ.

       2) Add #include <procps/xtra-procps-debug.h> to any program after the #include <procps/pids.h>.

       This  verification  feature  incurs  substantial  overhead.   Therefore,  it  is important that it not be
       activated for a production/release build.

ENVIRONMENT VARIABLE(S)

       The value set for the following is unimportant, just its presence.

       LIBPROC_HIDE_KERNEL
              This will  hide  kernel  threads  which  would  otherwise  be  returned  with  a  procps_pids_get,
              procps_pids_select or procps_pids_reap call.

SEE ALSO

       procps(3), procps_misc(3), proc(5).