Man page - procps_pids(3)
Packages contains this manual
Available languages:
en pl sv uk roManual
PROCPS_PIDS
NAMESYNOPSIS
DESCRIPTION
Overview
Usage
Caveats
RETURN VALUE
Functions Returning an âintâ
Functions Returning an âaddressâ
DEBUGGING
ENVIRONMENT VARIABLE(S)
SEE ALSO
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).