svcadm(8)을 검색하려면 섹션에서 8 을 선택하고, 맨 페이지 이름에 svcadm을 입력하고 검색을 누른다.
pctx_set_events(3cpc)
CPU Performance Counters Library Functions pctx_set_events(3CPC)
NAME
pctx_set_events - associate callbacks with process events
SYNOPSIS
cc [ flag... ] file... −lpctx [ library... ]
#include <libpctx.h>
typedef enum {
PCTX_NULL_EVENT = 0,
PCTX_SYSC_EXEC_EVENT,
PCTX_SYSC_FORK_EVENT,
PCTX_SYSC_EXIT_EVENT,
PCTX_SYSC_LWP_CREATE_EVENT,
PCTX_INIT_LWP_EVENT,
PCTX_FINI_LWP_EVENT,
PCTX_SYSC_LWP_EXIT_EVENT
} pctx_event_t;
typedef int pctx_sysc_execfn_t(pctx_t *pctx, pid_t pid, id_t lwpid,
char *cmd, void *arg);
typedef void pctx_sysc_forkfn_t(pctx_t *pctx,
pid_t pid, id_t lwpid, pid_t child, void *arg);
typedef void pctx_sysc_exitfn_t(pctx_t *pctx, pid_t pid, id_t lwpid,
void *arg);
typedef int pctx_sysc_lwp_createfn_t(pctx_t *pctx, pid_t pid, id_t lwpid,
void *arg);
typedef int pctx_init_lwpfn_t(pctx_t *pctx, pid_t pid, id_t lwpid,
void *arg);
typedef int pctx_fini_lwpfn_t(pctx_t *pctx, pid_t pid, id_t lwpid,
void *arg);
typedef int pctx_sysc_lwp_exitfn_t(pctx_t *pctx, pid_t pid, id_t lwpid,
void *arg);
int pctx_set_events(pctx_t *pctx...);
DESCRIPTION
The pctx_set_events() function allows the caller (the controlling
process) to express interest in various events in the controlled
process. See pctx_capture(3CPC) for information about how the control‐
ling process is able to create, capture and manipulate the controlled
process.
The pctx_set_events() function takes a pctx_t handle, followed by a
variable length list of pairs of pctx_event_t tags and their corre‐
sponding handlers, terminated by a PCTX_NULL_EVENT tag.
Most of the events correspond closely to various classes of system
calls, though two additional pseudo-events (init_lwp and fini_lwp) are
provided to allow callers to perform various housekeeping tasks. The
init_lwp handler is called as soon as the library identifies a new LWP,
while fini_lwp is called just before the LWP disappears. Thus the clas‐
sic "hello world" program would see an init_lwp event, a fini_lwp event
and (process) exit event, in that order. The table below displays the
interactions between the states of the controlled process and the han‐
dlers executed by users of the library.
Table 1 System Calls and pctx Handlers
tab() box; lw(0.97i) |lw(0.65i) |lw(3.88i) lw(0.97i) |lw(0.65i)
|lw(3.88i) System callHandlerComments _ exec, execvefini_lwpT{ Invoked
serially on all lwps in the process. T} execT{ Only invoked if the
exec() system call succeeded. T} init_lwpT{ If the exec succeeds, only
invoked on lwp 1. If the exec fails, invoked serially on all lwps in
the process. T} _ fork, vfork,
fork1forkT{ Only invoked if the fork() system call succeeded. T} _
spawnforkT{ Only invoked if the spawn() system call succeeded. T}
execT{ Only invoked if the spawn() system call succeeded. T}
init_lwpInvoked for lwp 1 in the new process. _ exitfini_lwpInvoked on
all lwps in the process. exitInvoked on the exiting lwp.
Each of the handlers is passed the caller's opaque handle, a pctx_t
handle, the pid, and lwpid of the process and lwp generating the event.
The lwp_exit, and (process) exit events are delivered before the under‐
lying system calls begin, while the exec, fork, and lwp_create events
are only delivered after the relevant system calls complete success‐
fully. The exec handler is passed a string that describes the command
being executed. Catching the fork event causes the calling process to
fork(2), then capture the child of the controlled process using
pctx_capture() before handing control to the fork handler. The process
is released on return from the handler. The spawn() system call is sim‐
ilar to the fork() function followed directly by the exec() function
and modeled as such for this library. There will be no call to the
fini_lwp handler as the exec() function is performed in an empty
process.
RETURN VALUES
Upon successful completion, pctx_set_events() returns 0. Otherwise, the
function returns -1.
EXAMPLES
Example 1 HandleExec example.
This example captures an existing process whose process identifier is
pid, and arranges to call the HandleExec routine when the process per‐
forms an exec(2).
static void
HandleExec(pctx_t *pctx, pid_t pid, id_t lwpid, char *cmd, void *arg)
{
(void) printf("pid %d execed '%s'\n", (int)pid, cmd);
}
int
main()
{
...
pctx = pctx_capture(pid, NULL, 1, NULL);
(void) pctx_set_events(pctx,
PCTX_SYSC_EXEC_EVENT, HandleExec,
...
PCTX_NULL_EVENT);
(void) pctx_run(pctx, 0, 0, NULL);
pctx_release(pctx);
}
ATTRIBUTES
See attributes(7) for descriptions of the following attributes:
tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
TRIBUTE VALUE _ Interface StabilityCommitted _ MT-LevelUnsafe
SEE ALSO
exec(2), exit(2), spawn(2), fork(2), fork1(2), vfork(2), cpc(3CPC),
libpctx(3LIB), proc(5), attributes(7)
Oracle Solaris 11.4 27 Nov 2017 pctx_set_events(3CPC)