CT_PR_EVENT_GET_PID(3CONTRACT) Contract Management Library Functions
NAME
ct_pr_event_get_pid, ct_pr_event_get_ppid, ct_pr_event_get_signal,
ct_pr_event_get_sender, ct_pr_event_get_senderct,
ct_pr_event_get_exitstatus, ct_pr_event_get_pcorefile,
ct_pr_event_get_gcorefile, ct_pr_event_get_zcorefile - process
contract event functions
SYNOPSIS
cc [
flag... ]
file...
-D_LARGEFILE64_SOURCE -lcontract [
library... ]
#include <libcontract.h>
#include <sys/contract/process.h>
int ct_pr_event_get_pid(
ct_evthdl_t evthdl,
pid_t *pidp);
int ct_pr_event_get_ppid(
ct_evthdl_t evthdl,
pid_t *pidp);
int ct_pr_event_get_signal(
ct_evthdl_t evthdl,
int *signalp);
int ct_pr_event_get_sender(
ct_evthdl_t evthdl,
pid_t *pidp);
int ct_pr_event_get_senderct(
ct_evthdl_t evthdl,
ctid_t *ctidp);
int ct_pr_event_get_exitstatus(
ct_evthdl_t evthdl,
int *statusp);
int ct_pr_event_get_pcorefile(
ct_evthdl_t evthdl,
char **namep);
int ct_pr_event_get_gcorefile(
ct_evthdl_t evthdl,
char **namep);
int ct_pr_event_get_zcorefile(
ct_evthdl_t evthdl,
char **namep);
DESCRIPTION
These functions read process contract event information from an event
object returned by
ct_event_read(3CONTRACT) or
ct_event_read_critical(3CONTRACT).
The
ct_pr_event_get_pid() function reads the process ID of the
process generating the event.
The
ct_pr_event_get_ppid() function reads the process ID of the
process that forked the new process causing the
CT_PR_EV_FORK event.
The
ct_pr_event_get_signal() function reads the signal number of the
signal that caused the
CT_PR_EV_SIGNAL event.
The
ct_pr_event_get_sender() function reads the process ID of the
process that sent the signal that caused the
CT_PR_EV_SIGNAL event.
If the signal's sender was not in the same zone as the signal's
recipient, this information is available only to event consumers in
the global zone.
The
ct_pr_event_get_senderct() function reads the contract ID of the
process that sent the signal that caused the
CT_PR_EV_SIGNAL event.
If the signal's sender was not in the same zone as the signal's
recipient, this information is available only to event consumers in
the global zone.
The
ct_pr_event_get_exitstatus() function reads the exit status of
the process generating a
CT_PR_EV_EXIT event.
The
ct_pr_event_get_pcorefile() function reads the name of the
process core file if one was created when the
CT_PR_EV_CORE event was
generated. A pointer to a character array is stored in *
namep and is
freed when
ct_event_free(3CONTRACT) is called on the event handle.
The
ct_pr_event_get_gcorefile() function reads the name of the zone's
global core file if one was created when the
CT_PR_EV_CORE event was
generated. A pointer to a character array is stored in *
namep and is
freed when
ct_event_free() is called on the event handle.
The
ct_pr_event_get_zcorefile() function reads the name of the
system-wide core file in the global zone if one was created when the
CT_PR_EV_CORE event was generated. This information is available only
to event consumers in the global zone. A pointer to a character array
is stored in *
namep and is freed when
ct_event_free() is called on
the event handle.
RETURN VALUES
Upon successful completion,
ct_pr_event_get_pid(),
ct_pr_event_get_ppid(),
ct_pr_event_get_signal(),
ct_pr_event_get_sender(),
ct_pr_event_get_senderct(),
ct_pr_event_get_exitstatus(),
ct_pr_event_get_pcorefile(),
ct_pr_event_get_gcorefile(), and
ct_pr_event_get_zcorefile() return
0. Otherwise, they return a non-zero error value.
ERRORS
The
ct_pr_event_get_pid(),
ct_pr_event_get_ppid(),
ct_pr_event_get_signal(),
ct_pr_event_get_sender(),
ct_pr_event_get_senderct(),
ct_pr_event_get_exitstatus(),
ct_pr_event_get_pcorefile(),
ct_pr_event_get_gcorefile(), and
ct_pr_event_get_zcorefile() functions will fail if:
EINVAL The
evthdl argument is not a process contract event object.
The
ct_pr_event_get_ppid(),
ct_pr_event_get_signal(),
ct_pr_event_get_sender(),
ct_pr_event_get_senderct(),
ct_pr_event_get_exitstatus(),
ct_pr_event_get_pcorefile(),
ct_pr_event_get_gcorefile(), and
ct_pr_event_get_zcorefile() functions will fail if:
EINVAL The requested data do not match the event type.
The
ct_pr_event_get_sender() and
ct_pr_event_get_senderct() functions
will fail if:
ENOENT The process or contract ID of the sender was not available,
or the event object was read by a process running in a non-
global zone and the sender was in a different zone.
The
ct_pr_event_get_pcorefile(),
ct_pr_event_get_gcorefile(), and
ct_pr_event_get_zcorefile() functions will fail if:
ENOENT The requested core file was not created.
The
ct_pr_event_get_zcorefile() function will fail if:
ENOENT The event object was read by a process running in a non-
global zone.
EXAMPLES
Example 1: Print the instigator of all CT_PR_EV_SIGNAL events.
Open the process contract bundle. Loop reading events. Fetch and
display the signalled pid and signalling pid for each
CT_PR_EV_SIGNAL event encountered.
#include <sys/types.h>
#include <fcntl.h>
#include <stdio.h>
#include <libcontract.h>
...
int fd;
ct_evthdl_t event;
pid_t pid, sender;
fd = open("/system/contract/process/bundle", O_RDONLY);
for (;;) {
ct_event_read(fd, &event);
if (ct_event_get_type(event) != CT_PR_EV_SIGNAL) {
ct_event_free(event);
continue;
}
ct_pr_event_get_pid(event, &pid);
if (ct_pr_event_get_sender(event, &sender) == ENOENT)
printf("process %ld killed by unknown process\n",
(long)pid);
else
printf("process %ld killed by process %ld\n",
(long)pid, (long)sender);
ct_event_free(event);
}
...
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Evolving |
+--------------------+-----------------+
|MT-Level | Safe |
+--------------------+-----------------+
SEE ALSO
ct_event_free(3CONTRACT),
ct_event_read(3CONTRACT),
ct_event_read_critical(3CONTRACT),
libcontract(3LIB),
contract(5),
process(5),
attributes(7),
lfcompile(7) November 21, 2021
CT_PR_EVENT_GET_PID(3CONTRACT)