pctx_set_events(3cpc) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

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)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3