summaryrefslogtreecommitdiff
path: root/usr/src/man/man4/proc.4
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/man/man4/proc.4')
-rw-r--r--usr/src/man/man4/proc.43212
1 files changed, 0 insertions, 3212 deletions
diff --git a/usr/src/man/man4/proc.4 b/usr/src/man/man4/proc.4
deleted file mode 100644
index 53714657e5..0000000000
--- a/usr/src/man/man4/proc.4
+++ /dev/null
@@ -1,3212 +0,0 @@
-.\" Copyright 1989 AT&T
-.\" Copyright (c) 2006, Sun Microsystems, Inc. All Rights Reserved.
-.\" Copyright 2019, Joyent, Inc.
-.\" Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
-.\"
-.\" The contents of this file are subject to the terms of the
-.\" Common Development and Distribution License (the "License").
-.\" You may not use this file except in compliance with the License.
-.\"
-.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-.\" or http://www.opensolaris.org/os/licensing.
-.\" See the License for the specific language governing permissions
-.\" and limitations under the License.
-.\"
-.\" When distributing Covered Code, include this CDDL HEADER in each
-.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-.\" If applicable, add the following below this CDDL HEADER, with the
-.\" fields enclosed by brackets "[]" replaced with your own identifying
-.\" information: Portions Copyright [yyyy] [name of copyright owner]
-.\"
-.Dd May 17, 2020
-.Dt PROC 4
-.Os
-.Sh NAME
-.Nm proc
-.Nd /proc, the process file system
-.Sh DESCRIPTION
-.Pa /proc
-is a file system that provides access to the state of each process
-and light-weight process (lwp) in the system.
-The name of each entry in the
-.Pa /proc
-directory is a decimal number corresponding to a process-ID.
-These entries are themselves subdirectories.
-Access to process state is provided by additional files contained within each
-subdirectory; the hierarchy is described more completely below.
-In this document,
-.Dq Pa /proc file
-refers to a non-directory file within the hierarchy rooted at
-.Pa /proc .
-The owner of each
-.Pa /proc
-file and subdirectory is determined by the user-ID of the process.
-.Pp
-.Pa /proc
-can be mounted on any mount point, in addition to the standard
-.Pa /proc
-mount point, and can be mounted several places at once.
-Such additional mounts are allowed in order to facilitate the confinement of
-processes to subtrees of the file system via
-.Xr chroot 2
-and yet allow such processes access to commands like
-.Xr ps 1 .
-.Pp
-Standard system calls are used to access
-.Pa /proc
-files:
-.Xr open 2 ,
-.Xr close 2 ,
-.Xr read 2 ,
-and
-.Xr write 2
-(including
-.Xr readv 2 ,
-.Xr writev 2 ,
-.Xr pread 2 ,
-and
-.Xr pwrite 2 ) .
-Most files describe process state and can only be opened for reading.
-.Pa ctl
-and
-.Pa lwpctl
-(control) files permit manipulation of process state and can only be opened for
-writing.
-.Pa as
-(address space) files contain the image of the running process and can be
-opened for both reading and writing.
-An open for writing allows process control; a read-only open allows inspection
-but not control.
-In this document, we refer to the process as open for reading or writing if
-any of its associated
-.Pa /proc
-files is open for reading or writing.
-.Pp
-In general, more than one process can open the same
-.Pa /proc
-file at the same time. \fIExclusive\fR \fIopen\fR is an advisory mechanism provided to
-allow controlling processes to avoid collisions with each other.
-A process can obtain exclusive control of a target process, with respect to
-other cooperating processes, if it successfully opens any
-.Pa /proc
-file in the target process for writing (the
-.Pa as
-or
-.Pa ctl
-files, or the
-.Pa lwpctl
-file of any lwp) while specifying
-.Sy O_EXCL
-in the
-.Xr open 2 .
-Such an open will fail if the target process is already open for writing (that
-is, if an
-.Pa as ,
-.Pa ctl ,
-or
-.Pa lwpctl
-file is already open for writing).
-There can be any number of concurrent read-only opens;
-.Sy O_EXCL
-is ignored on opens for reading.
-It is recommended that the first open for writing by a controlling
-process use the
-.Sy O_EXCL
-flag; multiple controlling processes usually result in chaos.
-.Pp
-If a process opens one of its own
-.Pa /proc
-files for writing, the open
-succeeds regardless of
-.Sy O_EXCL
-and regardless of whether some other process has the process open for writing.
-Self-opens do not count when another process attempts an exclusive open.
-(A process cannot exclude a debugger by opening itself for writing and the
-application of a debugger cannot prevent a process from opening itself.)
-All self-opens for writing are forced to be close-on-exec (see the
-.Sy F_SETFD
-operation of
-.Xr fcntl 2 ) .
-.Pp
-Data may be transferred from or to any locations in the address space of the
-traced process by applying
-.Xr lseek 2
-to position the
-.Pa as
-file at the virtual address of interest followed by
-.Xr read 2
-or
-.Xr write 2
-(or by using
-.Xr pread 2
-or
-.Xr pwrite 2
-for the combined operation).
-The address-map files
-.Pa /proc/ Ns Em pid Ns Pa /map
-and
-.Pa /proc/ Ns Em pid Ns Pa /xmap
-can be read to determine the accessible areas (mappings) of the address space.
-.Sy I/O
-transfers may span contiguous mappings.
-An
-.Sy I/O
-request extending into an unmapped area is truncated at the boundary.
-A write request beginning at an unmapped virtual address fails with
-.Er EIO ;
-a read request beginning at an unmapped virtual address returns zero (an
-end-of-file indication).
-.Pp
-Information and control operations are provided through additional files.
-.In procfs.h
-contains definitions of data structures and message formats
-used with these files.
-Some of these definitions involve the use of sets of flags.
-The set types
-.Sy sigset_t ,
-.Sy fltset_t ,
-and
-.Sy sysset_t
-correspond, respectively, to signal, fault, and system call enumerations
-defined in
-.In sys/signal.h ,
-.In sys/fault.h ,
-and
-.In sys/syscall.h .
-Each set type is large enough to hold flags for its own enumeration.
-Although they are of different sizes, they have a common
-structure and can be manipulated by these macros:
-.Bd -literal -offset indent
-prfillset(&set); /* turn on all flags in set */
-premptyset(&set); /* turn off all flags in set */
-praddset(&set, flag); /* turn on the specified flag */
-prdelset(&set, flag); /* turn off the specified flag */
-r = prismember(&set, flag); /* != 0 iff flag is turned on */
-.Ed
-.Pp
-One of
-.Fn prfillset
-or
-.Fn premptyset
-must be used to initialize
-.Fa set
-before it is used in any other operation.
-.Fa flag
-must be a member of the enumeration corresponding to
-.Fa set .
-.Pp
-Every process contains at least one
-.Em light-weight process ,
-or
-.Sy lwp .
-Each lwp represents a flow of execution that is independently scheduled by the
-operating system.
-All lwps in a process share its address space as well as many other attributes.
-Through the use of
-.Pa lwpctl
-and
-.Pa ctl
-files as described below, it is possible to affect individual lwps in a
-process or to affect all of them at once, depending on the operation.
-.Pp
-When the process has more than one lwp, a representative lwp is chosen by the
-system for certain process status files and control operations.
-The representative lwp is a stopped lwp only if all of the process's lwps are
-stopped; is stopped on an event of interest only if all of the lwps are so
-stopped (excluding
-.Sy PR_SUSPENDED
-lwps); is in a
-.Sy PR_REQUESTED
-stop only if there are no other events of interest to be found; or, failing
-everything else, is in a
-.Sy PR_SUSPENDED
-stop (implying that the process is deadlocked).
-See the description of the
-.Pa status
-file for definitions of stopped states.
-See the
-.Sy PCSTOP
-control operation for the definition of
-.Dq event of interest .
-.Pp
-The representative lwp remains fixed (it will be chosen again on the next
-operation) as long as all of the lwps are stopped on events of interest or are
-in a
-.Sy PR_SUSPENDED
-stop and the
-.Sy PCRUN
-control operation is not applied to any of them.
-.Pp
-When applied to the process control file, every
-.Pa /proc
-control operation
-that must act on an lwp uses the same algorithm to choose which lwp to act
-upon.
-Together with synchronous stopping (see
-.Sy PCSET ) ,
-this enables a debugger to control a multiple-lwp process using only the
-process-level status and control files if it so chooses.
-More fine-grained control can be achieved using the lwp-specific files.
-.Pp
-The system supports two process data models, the traditional 32-bit data model
-in which ints, longs and pointers are all 32 bits wide (the ILP32 data model),
-and on some platforms the 64-bit data model in which longs and pointers, but
-not ints, are 64 bits in width (the LP64 data model).
-In the LP64 data model some system data types, notably
-.Sy size_t ,
-.Sy off_t ,
-.Sy time_t
-and
-.Sy dev_t ,
-grow from 32 bits to 64 bits as well.
-.Pp
-The
-.Pa /proc
-interfaces described here are available to both 32-bit and
-64-bit controlling processes.
-However, many operations attempted by a 32-bit
-controlling process on a 64-bit target process will fail with
-.Er EOVERFLOW
-because the address space range of a 32-bit process cannot encompass a 64-bit
-process or because the data in some 64-bit system data type cannot be
-compressed to fit into the corresponding 32-bit type without loss of
-information.
-Operations that fail in this circumstance include reading and
-writing the address space, reading the address-map files, and setting the
-target process's registers.
-There is no restriction on operations applied by a
-64-bit process to either a 32-bit or a 64-bit target processes.
-.Pp
-The format of the contents of any
-.Pa /proc
-file depends on the data model of the observer (the controlling process), not
-on the data model of the target process.
-A 64-bit debugger does not have to translate the information it reads from a
-.Pa /proc
-file for a 32-bit process from 32-bit format to 64-bit format.
-However, it usually has to be aware of the data model of the target process.
-The
-.Sy pr_dmodel
-field of the
-.Pa status
-files indicates the target process's data model.
-.Pp
-To help deal with system data structures that are read from 32-bit processes, a
-64-bit controlling program can be compiled with the C preprocessor symbol
-.Dv _SYSCALL32
-defined before system header files are included.
-This makes explicit 32-bit fixed-width data structures (like
-.Sy struct stat32 )
-visible to the 64-bit program.
-See
-.Xr types32.h 3HEAD .
-.Sh DIRECTORY STRUCTURE
-At the top level, the directory
-.Pa /proc
-contains entries each of which names an existing process in the system.
-These entries are themselves directories.
-Except where otherwise noted, the files described below can be
-opened for reading only.
-In addition, if a process becomes a
-.Em zombie
-(one that has exited but whose parent has not yet performed a
-.Xr wait 3C
-upon it), most of its associated
-.Pa /proc
-files disappear from the hierarchy; subsequent attempts to open them, or to
-read or write files opened before the process exited, will elicit the error
-.Er ENOENT .
-.Pp
-Although process state and consequently the contents of
-.Pa /proc
-files can change from instant to instant, a single
-.Xr read 2
-of a
-.Pa /proc
-file is guaranteed to return a sane representation of state; that is, the read
-will be atomic with respect to the state of the process.
-No such guarantee applies to successive reads applied to a
-.Pa /proc
-file for a running process.
-In addition, atomicity is not guaranteed for
-.Sy I/O
-applied to the
-.Pa as
-(address-space) file for a running process or for a process whose address space
-contains memory shared by another running process.
-.Pp
-A number of structure definitions are used to describe the files.
-These structures may grow by the addition of elements at the end in future
-releases of the system and it is not legitimate for a program to assume that
-they will not.
-.Sh STRUCTURE OF Pa /proc/ Ns Em pid
-A given directory
-.Pa /proc/ Ns Em pid
-contains the following entries.
-A process can use the invisible alias
-.Pa /proc/self
-if it wishes to open one of its own
-.Pa /proc
-files (invisible in the sense that the name
-.Dq self
-does not appear in a directory listing of
-.Pa /proc
-obtained from
-.Xr ls 1 ,
-.Xr getdents 2 ,
-or
-.Xr readdir 3C ) .
-.Ss contracts
-A directory containing references to the contracts held by the process.
-Each entry is a symlink to the contract's directory under
-.Pa /system/contract .
-See
-.Xr contract 4 .
-.Ss as
-Contains the address-space image of the process; it can be opened for both
-reading and writing.
-.Xr lseek 2
-is used to position the file at the virtual address of interest and then the
-address space can be examined or changed through
-.Xr read 2
-or
-.Xr write 2
-(or by using
-.Xr pread 2
-or
-.Xr pwrite 2
-for the combined operation).
-.Ss ctl
-A write-only file to which structured messages are written directing the system
-to change some aspect of the process's state or control its behavior in some
-way.
-The seek offset is not relevant when writing to this file.
-Individual lwps also have associated
-.Pa lwpctl
-files in the lwp subdirectories.
-A control message may be written either to the process's
-.Pa ctl
-file or to a specific
-.Pa lwpctl
-file with operation-specific effects.
-The effect of a control message is immediately reflected in the state of the
-process visible through appropriate status and information files.
-The types of control messages are described in detail later.
-See
-.Sx CONTROL MESSAGES .
-.Ss status
-Contains state information about the process and the representative lwp.
-The file contains a
-.Sy pstatus
-structure which contains an embedded
-.Sy lwpstatus
-structure for the representative lwp, as follows:
-.Bd -literal -offset 2
-typedef struct pstatus {
- int pr_flags; /* flags (see below) */
- int pr_nlwp; /* number of active lwps in the process */
- int pr_nzomb; /* number of zombie lwps in the process */
- pid_tpr_pid; /* process id */
- pid_tpr_ppid; /* parent process id */
- pid_tpr_pgid; /* process group id */
- pid_tpr_sid; /* session id */
- id_t pr_aslwpid; /* obsolete */
- id_t pr_agentid; /* lwp-id of the agent lwp, if any */
- sigset_t pr_sigpend; /* set of process pending signals */
- uintptr_t pr_brkbase; /* virtual address of the process heap */
- size_t pr_brksize; /* size of the process heap, in bytes */
- uintptr_t pr_stkbase; /* virtual address of the process stack */
- size_tpr_stksize; /* size of the process stack, in bytes */
- timestruc_t pr_utime; /* process user cpu time */
- timestruc_t pr_stime; /* process system cpu time */
- timestruc_t pr_cutime; /* sum of children's user times */
- timestruc_t pr_cstime; /* sum of children's system times */
- sigset_t pr_sigtrace; /* set of traced signals */
- fltset_t pr_flttrace; /* set of traced faults */
- sysset_t pr_sysentry; /* set of system calls traced on entry */
- sysset_t pr_sysexit; /* set of system calls traced on exit */
- char pr_dmodel; /* data model of the process */
- taskid_t pr_taskid; /* task id */
- projid_t pr_projid; /* project id */
- zoneid_t pr_zoneid; /* zone id */
- lwpstatus_t pr_lwp; /* status of the representative lwp */
-} pstatus_t;
-.Ed
-.Pp
-.Sy pr_flags
-is a bit-mask holding the following process flags.
-For convenience, it also contains the lwp flags for the representative lwp,
-described later.
-.Bl -tag -width "PR_MSACCT" -offset indent
-.It Sy PR_ISSYS
-process is a system process (see
-.Sx PCSTOP ) .
-.It Sy PR_VFORKP
-process is the parent of a vforked child (see
-.Sx PCWATCH ) .
-.It Sy PR_FORK
-process has its inherit-on-fork mode set (see
-.Sx PCSET ) .
-.It Sy PR_RLC
-process has its run-on-last-close mode set (see
-.Sx PCSET ) .
-.It Sy PR_KLC
-process has its kill-on-last-close mode set (see
-.Sx PCSET ) .
-.It Sy PR_ASYNC
-process has its asynchronous-stop mode set (see
-.Sx PCSET ) .
-.It Sy PR_MSACCT
-Set by default in all processes to indicate that microstate accounting is
-enabled.
-However, this flag has been deprecated and no longer has any effect.
-Microstate accounting may not be disabled; however, it is still possible to
-toggle the flag.
-.It Sy PR_MSFORK
-Set by default in all processes to indicate that microstate accounting will be
-enabled for processes that this parent
-.Xr fork 2 Ns s .
-However, this flag has been deprecated and no longer has any effect.
-It is possible to toggle this flag; however, it is not possible to disable
-microstate accounting.
-.It Sy PR_BPTADJ
-process has its breakpoint adjustment mode set (see
-.Sx PCSET ) .
-.It Sy PR_PTRACE
-process has its ptrace-compatibility mode set (see
-.Sx PCSET ) .
-.El
-.Pp
-.Sy pr_nlwp
-is the total number of active lwps in the process.
-.Sy pr_nzomb
-is the total number of zombie lwps in the process.
-A zombie lwp is a non-detached lwp that has terminated but has not been reaped
-with
-.Xr thr_join 3C
-or
-.Xr pthread_join 3C .
-.Pp
-.Sy pr_pid ,
-.Sy pr_ppi ,
-.Sy pr_pgid ,
-and
-.Sy pr_sid
-are, respectively, the process ID, the ID of the process's parent, the
-process's process group ID, and the process's session ID.
-.Pp
-.Sy pr_aslwpid
-is obsolete and is always zero.
-.Pp
-.Sy pr_agentid
-is the lwp-ID for the
-.Pa /proc
-agent lwp (see the
-.Sx PCAGENT
-control operation).
-It is zero if there is no agent lwp in the process.
-.Pp
-.Sy pr_sigpend
-identifies asynchronous signals pending for the process.
-.Pp
-.Sy pr_brkbase
-is the virtual address of the process heap and
-.Sy pr_brksize
-is its size in bytes.
-The address formed by the sum of these values is the process
-.Sy break
-(see
-.Xr brk 2 ) .
-.Sy pr_stkbase
-and
-.Sy pr_stksize
-are, respectively, the virtual address of the process stack and its size in
-bytes.
-(Each lwp runs on a separate stack; the distinguishing characteristic of the
-process stack is that the operating system will grow it when necessary.)
-.Pp
-.Sy pr_utime ,
-.Sy pr_stime ,
-.Sy pr_cutime ,
-.Sy and pr_cstime
-are, respectively, the user
-.Sy CPU
-and system
-.Sy CPU
-time consumed by the process, and the cumulative user
-.Sy CPU
-and system
-.Sy CPU
-time consumed by the process's children, in seconds and nanoseconds.
-.Pp
-.Sy pr_sigtrace
-and
-.Sy pr_flttrace
-contain, respectively, the set of signals and the set of hardware faults that
-are being traced (see
-.Sx PCSTRACE
-and
-.Sx PCSFAULT ) .
-.Pp
-.Sy pr_sysentry
-and
-.Sy pr_sysexit
-contain, respectively, the sets of system calls being traced on entry and exit
-(see
-.Sx PCSENTRY
-and
-.Sx PCSEXIT ) .
-.Pp
-.Sy pr_dmodel
-indicates the data model of the process.
-Possible values are:
-.Bl -tag -width "PR_MODEL_NATIVE" -offset indent
-.It Sy PR_MODEL_ILP32
-process data model is ILP32.
-.It Sy PR_MODEL_LP64
-process data model is LP64.
-.It Sy PR_MODEL_NATIVE
-process data model is native.
-.El
-.Pp
-The
-.Sy pr_taskid ,
-.Sy pr_projid ,
-and
-.Sy pr_zoneid
-fields contain respectively, the numeric
-.Sy ID Ns s
-of the task, project, and zone in which the process was running.
-.Pp
-The constant
-.Sy PR_MODEL_NATIVE
-reflects the data model of the controlling process,
-.Em that is ,
-its value is
-.Sy PR_MODEL_ILP32
-or
-.Sy PR_MODEL_LP64
-according to whether the controlling process has been
-compiled as a 32-bit program or a 64-bit program, respectively.
-.Pp
-.Sy pr_lwp
-contains the status information for the representative lwp:
-.Bd -literal -offset 2
-typedef struct lwpstatus {
- int pr_flags; /* flags (see below) */
- id_t pr_lwpid; /* specific lwp identifier */
- short pr_why; /* reason for lwp stop, if stopped */
- short pr_what; /* more detailed reason */
- short pr_cursig; /* current signal, if any */
- siginfo_t pr_info; /* info associated with signal or fault */
- sigset_t pr_lwppend; /* set of signals pending to the lwp */
- sigset_t pr_lwphold; /* set of signals blocked by the lwp */
- struct sigaction pr_action;/* signal action for current signal */
- stack_t pr_altstack; /* alternate signal stack info */
- uintptr_t pr_oldcontext; /* address of previous ucontext */
- short pr_syscall; /* system call number (if in syscall) */
- short pr_nsysarg; /* number of arguments to this syscall */
- int pr_errno; /* errno for failed syscall */
- long pr_sysarg[PRSYSARGS]; /* arguments to this syscall */
- long pr_rval1; /* primary syscall return value */
- long pr_rval2; /* second syscall return value, if any */
- char pr_clname[PRCLSZ]; /* scheduling class name */
- timestruc_t pr_tstamp; /* real-time time stamp of stop */
- timestruc_t pr_utime; /* lwp user cpu time */
- timestruc_t pr_stime; /* lwp system cpu time */
- uintptr_t pr_ustack; /* stack boundary data (stack_t) address */
- ulong_t pr_instr; /* current instruction */
- prgregset_t pr_reg; /* general registers */
- prfpregset_t pr_fpreg; /* floating-point registers */
-} lwpstatus_t;
-.Ed
-.Pp
-.Sy pr_flags
-is a bit-mask holding the following lwp flags.
-For convenience, it also contains the process flags, described previously.
-.Bl -tag -width "PR_STOPPED" -offset indent
-.It Sy PR_STOPPED
-The lwp is stopped.
-.It Sy PR_ISTOP
-The lwp is stopped on an event of interest (see
-.Sx PCSTOP ) .
-.It Sy PR_DSTOP
-The lwp has a stop directive in effect (see
-.Sx PCSTOP ) .
-.It Sy PR_STEP
-The lwp has a single-step directive in effect (see
-.Sx PCRUN ) .
-.It Sy PR_ASLEEP
-The lwp is in an interruptible sleep within a system call.
-.It Sy PR_PCINVAL
-The lwp's current instruction
-.Pq Sy pr_instr
-is undefined.
-.It Sy PR_DETACH
-This is a detached lwp (see
-.Xr pthread_create 3C
-and
-.Xr pthread_join 3C ) .
-.It Sy PR_DAEMON
-This is a daemon lwp (see
-.Xr pthread_create 3C ) .
-.It Sy PR_ASLWP
-This flag is obsolete and is never set.
-.It Sy PR_AGENT
-This is the
-.Pa /proc
-agent lwp for the process.
-.El
-.Pp
-.Sy pr_lwpid
-names the specific lwp.
-.Pp
-.Sy pr_why
-.Sy and
-pr_what
-together describe, for a stopped lwp, the reason for the stop.
-Possible values of
-.Sy pr_why
-and the associated
-.Sy pr_what
-are:
-.Bl -tag -width "PR_JOBCONTROL" -offset left
-.It Sy PR_REQUESTED
-indicates that the stop occurred in response to a stop directive, normally
-because
-.Sy PCSTOP
-was applied or because another lwp stopped on an event of interest and the
-asynchronous-stop flag (see
-.Sx PCSET )
-was not set for the process.
-.Sy pr_what
-is unused in this case.
-.It Sy PR_SIGNALLED
-indicates that the lwp stopped on receipt of a signal (see
-.Sx PCSTRACE ) ;
-.Sy pr_what
-holds the signal number that caused the stop (for a newly-stopped
-lwp, the same value is in
-.Sy pr_cursig ) .
-.It Sy PR_FAULTED
-indicates that the lwp stopped on incurring a hardware fault (see
-.Sx PCSFAULT ) ;
-.Sy pr_what
-holds the fault number that caused the stop.
-.It Sy PR_SYSENTRY
-.It Sy PR_SYSEXIT
-indicate a stop on entry to or exit from a system call (see
-.Sx PCSENTRY
-and
-.Sx PCSEXIT ) ;
-.Sy pr_what
-holds the system call number.
-.It Sy PR_JOBCONTROL
-indicates that the lwp stopped due to the default action of a job control stop
-signal (see
-.Xr sigaction 2 ) ;
-.Sy pr_what
-holds the stopping signal number.
-.It Sy PR_SUSPENDED
-indicates that the lwp stopped due to internal synchronization of lwps within
-the process.
-.Sy pr_what
-is unused in this case.
-.El
-.Pp
-.Sy pr_cursig
-names the current signal, that is, the next signal to be delivered to the lwp,
-if any.
-.Sy pr_info ,
-when the lwp is in a
-.Sy PR_SIGNALLED
-or
-.Sy PR_FAULTED
-stop, contains additional information pertinent to the particular signal or
-fault (see
-.In sys/siginfo.h ) .
-.Pp
-.Sy pr_lwppend
-identifies any synchronous or directed signals pending for the lwp.
-.Sy pr_lwphold
-identifies those signals whose delivery is being blocked by the lwp (the
-signal mask).
-.Pp
-.Sy pr_action
-contains the signal action information pertaining to the current signal (see
-.Xr sigaction 2 ) ;
-it is undefined if
-.Sy pr_cursig
-is zero.
-.Sy pr_altstack
-contains the alternate signal stack information for the lwp (see
-.Xr sigaltstack 2 ) .
-.Pp
-.Sy pr_oldcontext ,
-if not zero, contains the address on the lwp stack of a
-.Sy ucontext
-structure describing the previous user-level context (see
-.Xr ucontext.h 3HEAD ) .
-It is non-zero only if the lwp is executing in the context of a signal handler.
-.Pp
-.Sy pr_syscall
-is the number of the system call, if any, being executed by
-the lwp; it is non-zero if and only if the lwp is stopped on
-.Sy PR_SYSENTRY
-or
-.Sy PR_SYSEXIT ,
-or is asleep within a system call
-.Pf ( Sy PR_ASLEEP
-is set).
-If
-.Sy pr_syscall
-is non-zero,
-.Sy pr_nsysarg
-is the number of arguments to the system call and
-.Sy pr_sysarg
-contains the actual arguments.
-.Pp
-.Sy pr_rval1 ,
-.Sy pr_rval2 ,
-and
-.Sy pr_errno
-are defined only if the lwp
-is stopped on
-.Sy PR_SYSEXIT
-or if the
-.Sy PR_VFORKP
-flag is set.
-If
-.Sy pr_errno
-is zero,
-.Sy pr_rval1
-and
-.Sy pr_rval2
-contain the return values from the system call.
-Otherwise,
-.Sy pr_errno
-contains the error number for the failing system call (see
-.In sys/errno.h ) .
-.Pp
-.Sy pr_clname
-contains the name of the lwp's scheduling class.
-.Pp
-.Sy pr_tstamp ,
-if the lwp is stopped, contains a time stamp marking when the
-lwp stopped, in real time seconds and nanoseconds since an arbitrary time in
-the past.
-.Pp
-.Sy pr_utime
-is the amount of user level CPU time used by this LWP.
-.Pp
-.Sy pr_stime
-is the amount of system level CPU time used by this LWP.
-.Pp
-.Sy pr_ustack
-is the virtual address of the
-.Sy stack_t
-that contains the stack boundaries for this LWP.
-See
-.Xr getustack 2
-and
-.Xr _stack_grow 3C .
-.Pp
-.Sy pr_instr
-contains the machine instruction to which the lwp's program counter refers.
-The amount of data retrieved from the process is machine-dependent.
-On SPARC based machines, it is a 32-bit word.
-On x86-based machines, it is a single byte.
-In general, the size is that of the machine's smallest instruction.
-If
-.Sy PR_PCINVAL
-is set,
-.Sy pr_instr
-is undefined; this occurs whenever the lwp is not stopped or when the program
-counter refers to an invalid virtual address.
-.Pp
-.Sy pr_reg
-is an array holding the contents of a stopped lwp's general registers.
-.Bl -tag -offset left -width "SPARC V8 (32-bit)"
-.It Sy SPARC
-On SPARC-based machines, the predefined constants
-.Sy R_G0
-\&.\&.\&.
-.Sy R_G7 ,
-.Sy R_O0
-\&.\&.\&.
-.Sy R_O7 ,
-.Sy R_L0
-\&.\&.\&.
-.Sy R_L7 ,
-.Sy R_I0
-\&.\&.\&.
-.Sy R_I7 ,
-.Sy R_PC ,
-.Sy R_nPC ,
-and
-.Sy R_Y
-can be used as indices to refer to the corresponding registers; previous
-register windows can be read from their overflow locations on the stack
-(however, see the
-.Pa gwindows
-file in the
-.Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid
-subdirectory).
-.It Sy SPARC V8 (32-bit)
-For SPARC V8 (32-bit) controlling processes, the predefined constants
-.Sy R_PSR ,
-.Sy R_WIM ,
-and
-.Sy R_TBR
-can be used as indices to refer to the corresponding special registers.
-For SPARC V9 (64-bit) controlling processes, the predefined constants
-.Sy R_CCR ,
-.Sy R_ASI ,
-and
-.Sy R_FPRS
-can be used as indices to refer to the corresponding special registers.
-.It Sy x86 (32-bit)
-For 32-bit x86 processes, the predefined constants listed belowcan be used as
-indices to refer to the corresponding registers.
-.Bl -tag -width "TRAPNO" -offset indent -compact
-.It SS
-.It UESP
-.It EFL
-.It CS
-.It EIP
-.It ERR
-.It TRAPNO
-.It EAX
-.It ECX
-.It EDX
-.It EBX
-.It ESP
-.It EBP
-.It ESI
-.It EDI
-.It DS
-.It ES
-.It GS
-.El
-.Pp
-The preceding constants are listed in
-.In sys/regset.h .
-.Pp
-Note that a 32-bit process can run on an x86 64-bit system, using the constants
-listed above.
-.It Sy x86 (64-bit)
-To read the registers of a 32-
-.Em or
-a 64-bit process, a 64-bit x86 process should use the predefined constants
-listed below.
-.Bl -tag -width "REG_TRAPNO" -offset indent -compact
-.It REG_GSBASE
-.It REG_FSBASE
-.It REG_DS
-.It REG_ES
-.It REG_GS
-.It REG_FS
-.It REG_SS
-.It REG_RSP
-.It REG_RFL
-.It REG_CS
-.It REG_RIP
-.It REG_ERR
-.It REG_TRAPNO
-.It REG_RAX
-.It REG_RCX
-.It REG_RDX
-.It REG_RBX
-.It REG_RBP
-.It REG_RSI
-.It REG_RDI
-.It REG_R8
-.It REG_R9
-.It REG_R10
-.It REG_R11
-.It REG_R12
-.It REG_R13
-.It REG_R14
-.It REG_R15
-.El
-.Pp
-The preceding constants are listed in
-.In sys/regset.h .
-.El
-.Pp
-.Sy pr_fpreg
-is a structure holding the contents of the floating-point registers.
-.Pp
-SPARC registers, both general and floating-point, as seen by a 64-bit
-controlling process are the V9 versions of the registers, even if the target
-process is a 32-bit (V8) process.
-V8 registers are a subset of the V9 registers.
-.Pp
-If the lwp is not stopped, all register values are undefined.
-.Ss psinfo
-Contains miscellaneous information about the process and the representative lwp
-needed by the
-.Xr ps 1
-command.
-.Sy psinfo
-remains accessible after a process becomes a
-.Em zombie .
-The file contains a
-.Sy psinfo
-structure which contains an embedded
-.Sy lwpsinfo
-structure for the representative lwp, as follows:
-.Bd -literal -offset 2
-typedef struct psinfo {
- int pr_flag; /* process flags (DEPRECATED: see below) */
- int pr_nlwp; /* number of active lwps in the process */
- int pr_nzomb; /* number of zombie lwps in the process */
- pid_t pr_pid; /* process id */
- pid_t pr_ppid; /* process id of parent */
- pid_t pr_pgid; /* process id of process group leader */
- pid_t pr_sid; /* session id */
- uid_t pr_uid; /* real user id */
- uid_t pr_euid; /* effective user id */
- gid_t pr_gid; /* real group id */
- gid_t pr_egid; /* effective group id */
- uintptr_t pr_addr; /* address of process */
- size_t pr_size; /* size of process image in Kbytes */
- size_t pr_rssize; /* resident set size in Kbytes */
- dev_t pr_ttydev; /* controlling tty device (or PRNODEV) */
- ushort_t pr_pctcpu; /* % of recent cpu time used by all lwps */
- ushort_t pr_pctmem; /* % of system memory used by process */
- timestruc_t pr_start; /* process start time, from the epoch */
- timestruc_t pr_time; /* cpu time for this process */
- timestruc_t pr_ctime; /* cpu time for reaped children */
- char pr_fname[PRFNSZ]; /* name of exec'ed file */
- char pr_psargs[PRARGSZ]; /* initial characters of arg list */
- int pr_wstat; /* if zombie, the wait() status */
- int pr_argc; /* initial argument count */
- uintptr_t pr_argv; /* address of initial argument vector */
- uintptr_t pr_envp; /* address of initial environment vector */
- char pr_dmodel; /* data model of the process */
- taskid_t pr_taskid; /* task id */
- projid_t pr_projid; /* project id */
- poolid_t pr_poolid; /* pool id */
- zoneid_t pr_zoneid; /* zone id */
- ctid_t pr_contract; /* process contract id */
- lwpsinfo_t pr_lwp; /* information for representative lwp */
-} psinfo_t;
-.Ed
-.Pp
-Some of the entries in
-.Sy psinfo ,
-such as
-.Sy pr_addr ,
-refer to internal kernel data structures and should not be expected to retain
-their meanings across different versions of the operating system.
-.Pp
-.Sy psinfo_t.pr_flag
-is a deprecated interface that should no longer be used.
-Applications currently relying on the
-.Sy SSYS
-bit in
-.Sy pr_flag
-should migrate to checking
-.Sy PR_ISSYS
-in the
-.Sy pstatus
-structure's
-.Sy pr_flags
-field.
-.Pp
-.Sy pr_pctcpu
-and
-.Sy pr_pctmem
-are 16-bit binary fractions in the range 0.0 to 1.0 with the binary point to
-the right of the high-order bit (1.0 == 0x8000).
-.Sy pr_pctcpu
-is the summation over all lwps in the process.
-.Pp
-.Sy pr_lwp
-contains the
-.Xr ps 1
-information for the representative lwp.
-If the process is a
-.Em zombie ,
-.Sy pr_nlwp ,
-.Sy pr_nzomb ,
-and
-.Sy pr_lwp.pr_lwpid
-are zero and the other fields of
-.Sy pr_lwp
-are undefined:
-.Bd -literal -offset 2
-typedef struct lwpsinfo {
- int pr_flag; /* lwp flags (DEPRECATED: see below) */
- id_t pr_lwpid; /* lwp id */
- uintptr_t pr_addr; /* internal address of lwp */
- uintptr_t pr_wchan; /* wait addr for sleeping lwp */
- char pr_stype; /* synchronization event type */
- char pr_state; /* numeric lwp state */
- char pr_sname; /* printable character for pr_state */
- char pr_nice; /* nice for cpu usage */
- short pr_syscall; /* system call number (if in syscall) */
- char pr_oldpri; /* pre-SVR4, low value is high priority */
- char pr_cpu; /* pre-SVR4, cpu usage for scheduling */
- int pr_pri; /* priority, high value = high priority */
- ushort_t pr_pctcpu; /* % of recent cpu time used by this lwp */
- timestruc_t pr_start; /* lwp start time, from the epoch */
- timestruc_t pr_time; /* cpu time for this lwp */
- char pr_clname[PRCLSZ]; /* scheduling class name */
- char pr_name[PRFNSZ]; /* name of system lwp */
- processorid_t pr_onpro; /* processor which last ran this lwp */
- processorid_t pr_bindpro;/* processor to which lwp is bound */
- psetid_t pr_bindpset; /* processor set to which lwp is bound */
- lgrp_id_t pr_lgrp; /* home lgroup */
-} lwpsinfo_t;
-.Ed
-.Pp
-Some of the entries in
-.Sy lwpsinfo ,
-such as
-.Sy pr_addr ,
-.Sy pr_wchan ,
-.Sy pr_stype ,
-.Sy pr_state ,
-and
-.Sy pr_name ,
-refer to internal kernel data structures and should not be expected to retain
-their meanings across different versions of the operating system.
-.Pp
-.Sy lwpsinfo_t.pr_flag
-is a deprecated interface that should no longer be used.
-.Pp
-.Sy pr_pctcpu
-is a 16-bit binary fraction, as described above.
-It represents the
-.Sy CPU
-time used by the specific lwp.
-On a multi-processor machine, the maximum value is 1/N, where N is the number
-of
-.Sy CPU Ns s .
-.Pp
-.Sy pr_contract
-is the id of the process contract of which the process is a member.
-See
-.Xr contract 4
-and
-.Xr process 4 .
-.Ss cred
-Contains a description of the credentials associated with the process:
-.Bd -literal -offset 2
-typedef struct prcred {
- uid_t pr_euid; /* effective user id */
- uid_t pr_ruid; /* real user id */
- uid_t pr_suid; /* saved user id (from exec) */
- gid_t pr_egid; /* effective group id */
- gid_t pr_rgid; /* real group id */
- gid_t pr_sgid; /* saved group id (from exec) */
- int pr_ngroups; /* number of supplementary groups */
- gid_t pr_groups[1]; /* array of supplementary groups */
-} prcred_t;
-.Ed
-.Pp
-The array of associated supplementary groups in
-.Sy pr_groups
- is of variable
-length; the
-.Sy cred
-file contains all of the supplementary groups.
-.Sy pr_ngroups
-indicates the number of supplementary groups. (See also the
-.Sy PCSCRED
-and
-.Sy PCSCREDX
-control operations.)
-.Ss priv
-Contains a description of the privileges associated with the process:
-.Bd -literal -offset 2
-typedef struct prpriv {
- uint32_t pr_nsets; /* number of privilege set */
- uint32_t pr_setsize; /* size of privilege set */
- uint32_t pr_infosize; /* size of supplementary data */
- priv_chunk_t pr_sets[1]; /* array of sets */
-} prpriv_t;
-.Ed
-.Pp
-The actual dimension of the
-.Sy pr_sets Ns []
-field is
-.D1 pr_sets[pr_nsets][pr_setsize]
-.Pp
-which is followed by additional information about the process state
-.Sy pr_infosize
-bytes in size.
-.Pp
-The full size of the structure can be computed using
-.Fn PRIV_PRPRIV_SIZE "prpriv_t *" .
-.Ss secflags
-This file contains the security-flags of the process.
-It contains a description of the security flags associated with the process.
-.Bd -literal -offset 2
-typedef struct prsecflags {
- uint32_t pr_version; /* ABI Versioning of this structure */
- secflagset_t pr_effective; /* Effective flags */
- secflagset_t pr_inherit; /* Inheritable flags */
- secflagset_t pr_lower; /* Lower flags */
- secflagset_t pr_upper; /* Upper flags */
-} prsecflags_t;
-.Ed
-.Pp
-The
-.Sy pr_version
-field is a version number for the structure, currently
-.Sy PRSECFLAGS_VERSION_1 .
-.Ss sigact
-Contains an array of
-.Sy sigaction structures
-describing the current dispositions of all signals associated with the traced
-process (see
-.Xr sigaction 2 ) .
-Signal numbers are displaced by 1 from array indices, so that the action for
-signal number
-.Va n
-appears in position
-.Va n Ns -1
-of the array.
-.Ss auxv
-Contains the initial values of the process's aux vector in an array of
-.Sy auxv_t
-structures (see
-.In sys/auxv.h ) .
-The values are those that were passed by the operating system as startup
-information to the dynamic linker.
-.Ss ldt
-This file exists only on x86-based machines.
-It is non-empty only if the process has established a local descriptor table
-.Pq Sy LDT .
-If non-empty, the file contains the array of currently active
-.Sy LDT
-entries in an array of elements of type
-.Vt struct ssd ,
-defined in
-.In sys/sysi86.h ,
-one element for each active
-.Sy LDT
-entry.
-.Ss map, xmap
-Contain information about the virtual address map of the process.
-The map file contains an array of
-.Sy prmap
-structures while the xmap file contains an
-array of
-.Sy prxmap
-structures.
-Each structure describes a contiguous virtual
-address region in the address space of the traced process:
-.Bd -literal -offset 2
-typedef struct prmap {
- uintptr_tpr_vaddr; /* virtual address of mapping */
- size_t pr_size; /* size of mapping in bytes */
- char pr_mapname[PRMAPSZ]; /* name in /proc/pid/object */
- offset_t pr_offset; /* offset into mapped object, if any */
- int pr_mflags; /* protection and attribute flags */
- int pr_pagesize; /* pagesize for this mapping in bytes */
- int pr_shmid; /* SysV shared memory identifier */
-} prmap_t;
-.Ed
-.Bd -literal -offset 2
-typedef struct prxmap {
- uintptr_t pr_vaddr; /* virtual address of mapping */
- size_t pr_size; /* size of mapping in bytes */
- char pr_mapname[PRMAPSZ]; /* name in /proc/pid/object */
- offset_t pr_offset; /* offset into mapped object, if any */
- int pr_mflags; /* protection and attribute flags */
- int pr_pagesize; /* pagesize for this mapping in bytes */
- int pr_shmid; /* SysV shared memory identifier */
- dev_t pr_dev; /* device of mapped object, if any */
- uint64_t pr_ino; /* inode of mapped object, if any */
- size_t pr_rss; /* pages of resident memory */
- size_t pr_anon; /* pages of resident anonymous memory */
- size_t pr_locked; /* pages of locked memory */
- uint64_t pr_hatpagesize; /* pagesize of mapping */
-} prxmap_t;
-.Ed
-.Pp
-.Sy pr_vaddr
-is the virtual address of the mapping within the traced process and
-.Sy pr_size
-is its size in bytes.
-.Sy pr_mapname ,
-if it does not contain a null string, contains the name of a file in the
-.Sy object
-directory (see below) that can be opened read-only to obtain a file descriptor
-for the mapped file associated with the mapping.
-This enables a debugger to find object file symbol tables without having to
-know the real path names of the executable file and shared libraries of
-the process.
-.Sy pr_offset
-is the 64-bit offset within the mapped file (if any) to which the virtual
-address is mapped.
-.Pp
-.Sy pr_mflags
-is a bit-mask of protection and attribute flags:
-.Bl -tag -width "MA_NORESERVE" -offset left
-.It Sy MA_READ
-mapping is readable by the traced process.
-.It Sy MA_WRITE
-mapping is writable by the traced process.
-.It Sy MA_EXEC
-mapping is executable by the traced process.
-.It Sy MA_SHARED
-mapping changes are shared by the mapped object.
-.It Sy MA_ISM
-mapping is intimate shared memory (shared MMU resources)
-.It Sy MAP_NORESERVE
-mapping does not have swap space reserved (mapped with MAP_NORESERVE)
-.It Sy MA_SHM
-mapping System V shared memory
-.El
-.Pp
-A contiguous area of the address space having the same underlying mapped object
-may appear as multiple mappings due to varying read, write, and execute
-attributes.
-The underlying mapped object does not change over the range of a
-single mapping.
-An
-.Sy I/O
-operation to a mapping marked
-.Sy MA_SHARED
-fails if applied at a virtual address not corresponding to a valid page in the
-underlying mapped object.
-A write to a
-.Sy MA_SHARED
-mapping that is not marked
-.Sy MA_WRITE
-fails.
-Reads and writes to private mappings always succeed.
-Reads and writes to unmapped addresses fail.
-.Pp
-.Sy pr_pagesize
-is the page size for the mapping, currently always the system pagesize.
-.Pp
-.Sy pr_shmid
-is the shared memory identifier, if any, for the mapping.
-Its value is \-1
-if the mapping is not System V shared memory.
-See
-.Xr shmget 2 .
-.Pp
-.Sy pr_dev
-is the device of the mapped object, if any, for the mapping.
-Its value is
-.Sy PRNODEV
-.Pq \-1
-if the mapping does not have a device.
-.Pp
-.Sy pr_ino
-is the inode of the mapped object, if any, for the mapping.
-Its contents are only valid if
-.Sy pr_dev
-is not
-.Sy PRNODEV .
-.Pp
-.Sy pr_rss
-is the number of resident pages of memory for the mapping.
-The number of resident bytes for the mapping may be determined by multiplying
-.Sy pr_rss
-by the page size given by
-.Sy pr_pagesize .
-.Pp
-.Sy pr_anon
-is the number of resident anonymous memory pages (pages which are
-private to this process) for the mapping.
-.Pp
-.Sy pr_locked
-is the number of locked pages for the mapping.
-Pages which are locked are always resident in memory.
-.Pp
-.Sy pr_hatpagesize
-is the size, in bytes, of the
-.Sy HAT
-.Pq Sy MMU
-translation for the mapping.
-.Sy pr_hatpagesize
-may be different than
-.Sy pr_pagesize .
-The possible values are hardware architecture specific, and
-may change over a mapping's lifetime.
-.Ss rmap
-Contains information about the reserved address ranges of the process.
-The file contains an array of
-.Sy prmap
-structures, as defined above for the
-.Sy map
-file.
-Each structure describes a contiguous virtual address region in the
-address space of the traced process that is reserved by the system in the sense
-that an
-.Xr mmap 2
-system call that does not specify
-.Sy MAP_FIXED
-will not use any part of it for the new mapping.
-Examples of such reservations include the address ranges reserved for the
-process stack and the individual thread stacks of a multi-threaded process.
-.Ss cwd
-A symbolic link to the process's current working directory.
-See
-.Xr chdir 2 .
-A
-.Xr readlink 2
-of
-.Pa /proc/ Ns Em pid Ns Pa /cwd
-yields a null string.
-However, it can be opened, listed, and searched as a directory, and can be the
-target of
-.Xr chdir 2 .
-.Ss root
-A symbolic link to the process's root directory.
-.Pa /proc/ Ns Em pid Ns Pa /root
-can differ from the system root directory if the process or one of its
-ancestors executed
-.Xr chroot 2
-as super user.
-It has the same semantics as
-.Pa /proc/ Ns Em pid Ns Pa /cwd .
-.Ss fd
-A directory containing references to the open files of the process.
-Each entry is a decimal number corresponding to an open file descriptor in the
-process.
-.Pp
-If an entry refers to a regular file, it can be opened with normal file system
-semantics but, to ensure that the controlling process cannot gain greater
-access than the controlled process, with no file access modes other than its
-read/write open modes in the controlled process.
-If an entry refers to a directory, it can be accessed with the same semantics
-as
-.Pa /proc/ Ns Em pid Ns Pa /cwd .
-An attempt to open any other type of entry fails with
-.Er EACCES .
-.Ss fdinfo
-A directory containing information about each of the process's open files.
-Each entry is a decimal number corresponding to an open file descriptor in the
-process.
-Each file contains a
-.Sy prfdinfo_t
-structure defined as follows:
-.Bd -literal -offset 2
-typedef struct prfdinfo {
- int pr_fd; /* file descriptor number */
- mode_t pr_mode; /* (see st_mode in stat(2)) */
- uint64_t pr_ino; /* inode number */
- uint64_t pr_size; /* file size */
- int64_t pr_offset; /* current offset of file descriptor */
- uid_t pr_uid; /* owner's user id */
- gid_t pr_gid; /* owner's group id */
- major_t pr_major; /* major number of device containing file */
- minor_t pr_minor; /* minor number of device containing file */
- major_t pr_rmajor; /* major number (if special file) */
- minor_t pr_rminor; /* minor number (if special file) */
- int pr_fileflags; /* (see F_GETXFL in fcntl(2)) */
- int pr_fdflags; /* (see F_GETFD in fcntl(2)) */
- short pr_locktype; /* (see F_GETLK in fcntl(2)) */
- pid_t pr_lockpid; /* process holding file lock (see F_GETLK) */
- int pr_locksysid; /* sysid of locking process (see F_GETLK) */
- pid_t pr_peerpid; /* peer process (socket, door) */
- int pr_filler[25]; /* reserved for future use */
- char pr_peername[PRFNSZ]; /* peer process name */
-#if __STDC_VERSION__ >= 199901L
- char pr_misc[]; /* self describing structures */
-#else
- char pr_misc[1];
-#endif
-} prfdinfo_t;
-.Ed
-.Pp
-The
-.Sy pr_misc
-element points to a list of additional miscellaneous data items, each of which
-has a header of type
-.Sy pr_misc_header_t
-specifying the size and type, and some data which immediately follow
-the header.
-.Bd -literal -offset 2
-typedef struct pr_misc_header {
- uint_t pr_misc_size;
- uint_t pr_misc_type;
-} pr_misc_header_t;
-.Ed
-.Pp
-The
-.Sy pr_misc_size
-field is the sum of the sizes of the header and the associated data and any
-trailing padding bytes which will be set to zero.
-The end of the list is indicated by a header with a zero size and a type with
-all bits set.
-.Pp
-The following miscellaneous data types can be present:
-.Bl -tag -width "PR_SOCKOPT_TCP_CONGESTION" -offset left
-.It Sy PR_PATHNAME
-The file descriptor's path in the filesystem.
-This is a NUL-terminated sequence of characters.
-.It Sy PR_SOCKETNAME
-A
-.Sy sockaddr
-structure representing the local socket name for this file descriptor, as
-would be returned by calling
-.Fn getsockname
-within the process.
-.It Sy PR_PEERSOCKNAME
-A
-.Sy sockaddr
-structure representing the peer socket name for this file descriptor, as
-would be returned by calling
-.Fn getpeername
-within the process.
-.It Sy PR_SOCKOPTS_BOOL_OPTS
-An unsigned integer which has bits set corresponding to options which are
-set on the underlying socket.
-The following bits may be set:
-.Bl -tag -width "PR_SO_PASSIVE_CONNECT"
-.It Sy PR_SO_DEBUG
-.It Sy PR_SO_REUSEADDR
-.It Sy PR_SO_REUSEPORT
-.It Sy PR_SO_KEEPALIVE
-.It Sy PR_SO_DONTROUTE
-.It Sy PR_SO_BROADCAST
-.It Sy PR_SO_OOBINLINE
-.It Sy PR_SO_DGRAM_ERRIND
-.It Sy PR_SO_ALLZONES
-.It Sy PR_SO_MAC_EXEMPT
-.It Sy PR_SO_EXCLBIND
-.It Sy PR_SO_PASSIVE_CONNECT
-.It Sy PR_SO_ACCEPTCONN
-.It Sy PR_UDP_NAT_T_ENDPOINT
-.It Sy PR_SO_VRRP
-.It Sy PR_SO_MAC_IMPLICIT
-.El
-.It Sy PR_SOCKOPT_LINGER
-A
-.Sy struct linger
-as would be returned by calling
-.Fn getsockopt SO_LINGER
-within the process.
-.It Sy PR_SOCKOPT_SNDBUF
-The data that would be returned by calling
-.Fn getsockopt SO_SNDBUF
-within the process.
-.It Sy PR_SOCKOPT_RCVBUF
-The data that would be returned by calling
-.Fn getsockopt SO_RCVBUF
-within the process.
-.It Sy PR_SOCKOPT_IP_NEXTHOP
-The data that would be returned by calling
-.Fn getsockopt IPPROTO_IP IP_NEXTHOP
-within the process.
-.It Sy PR_SOCKOPT_IPV6_NEXTHOP
-The data that would be returned by calling
-.Fn getsockopt IPPROTO_IPV6 IPV6_NEXTHOP
-within the process.
-.It Sy PR_SOCKOPT_TYPE
-The data that would be returned by calling
-.Fn getsockopt SO_TYPE
-within the process.
-.It Sy PR_SOCKOPT_TCP_CONGESTION
-For TCP sockets, the data that would be returned by calling
-.Fn getsockopt IPPROTO_TCP TCP_CONGESTION
-within the process.
-This is a NUL-terminated character array containing the name of the congestion
-algorithm in use for the socket.
-.It Sy PR_SOCKFILTERS_PRIV
-Private data relating to up to the first 32 socket filters pushed on this
-descriptor.
-.El
-.Ss object
-A directory containing read-only files with names corresponding to the
-.Sy pr_mapname
-entries in the
-.Sy map
-and
-.Sy pagedata
-files.
-Opening such a file yields a file descriptor for the underlying mapped file
-associated with an address-space mapping in the process.
-The file name
-.Pa a.out
-appears in the directory as an alias for the process's executable file.
-.Pp
-The
-.Pa object
-directory makes it possible for a controlling process to gain
-access to the object file and any shared libraries (and consequently the symbol
-tables) without having to know the actual path names of the executable files.
-.Ss path
-A directory containing symbolic links to files opened by the process.
-The directory includes one entry for
-.Pa cwd
-and
-.Pa root .
-The directory also contains a numerical entry for each file descriptor in the
-.Pa fd
-directory, and entries matching those in the
-.Pa object
-directory.
-If this information is not available, any attempt to read the contents of the
-symbolic link will fail.
-This is most common for files that do not exist in the filesystem namespace
-(such as
-.Sy FIFO Ns s
-and sockets), but can also happen for regular files.
-For the file descriptor entries, the path may be different from the one
-used by the process to open the file.
-.Ss pagedata
-Opening the page data file enables tracking of address space references and
-modifications on a per-page basis.
-.Pp
-A
-.Xr read 2
-of the page data file descriptor returns structured page data
-and atomically clears the page data maintained for the file by the system.
-That is to say, each read returns data collected since the last read; the
-first read returns data collected since the file was opened.
-When the call completes, the read buffer contains the following structure as
-its header and thereafter contains a number of section header structures and
-associated byte arrays that must be accessed by walking linearly through the
-buffer.
-.Bd -literal -offset 2
-typedef struct prpageheader {
- timestruc_t pr_tstamp; /* real time stamp, time of read() */
- ulong_t pr_nmap; /* number of address space mappings */
- ulong_t pr_npage; /* total number of pages */
-} prpageheader_t;
-.Ed
-.Pp
-The header is followed by
-.Sy "pr_nmap prasmap"
-structures and associated data arrays.
-The
-.Sy prasmap
-structure contains the following elements:
-.Bd -literal -offset 2
-typedef struct prasmap {
- uintptr_t pr_vaddr; /* virtual address of mapping */
- ulong_t pr_npage; /* number of pages in mapping */
- char pr_mapname[PRMAPSZ]; /* name in /proc/pid/object */
- offset_t pr_offset; /* offset into mapped object, if any */
- int pr_mflags; /* protection and attribute flags */
- int pr_pagesize; /* pagesize for this mapping in bytes */
- int pr_shmid; /* SysV shared memory identifier */
-} prasmap_t;
-.Ed
-.Pp
-Each section header is followed by
-.Sy pr_npage
-bytes, one byte for each page in the mapping, plus 0-7 null bytes at the end
-so that the next
-.Sy prasmap
-structure begins on an eight-byte aligned boundary.
-Each data byte may contain these flags:
-.Bl -tag -width "PG_REFERENCED" -offset 2
-.It Sy PG_REFERENCED
-page has been referenced.
-.It Sy PG_MODIFIED
-page has been modified.
-.El
-.Pp
-If the read buffer is not large enough to contain all of the page data, the
-read fails with
-.Er E2BIG
-and the page data is not cleared.
-The required size of the read buffer can be determined through
-.Xr fstat 2 .
-Application of
-.Xr lseek 2
-to the page data file descriptor is ineffective; every read
-starts from the beginning of the file.
-Closing the page data file descriptor
-terminates the system overhead associated with collecting the data.
-.Pp
-More than one page data file descriptor for the same process can be opened, up
-to a system-imposed limit per traced process.
-A read of one does not affect the data being collected by the system for the
-others.
-An open of the page data file will fail with
-.Er ENOMEM
-if the system-imposed limit would be exceeded.
-.Ss watch
-Contains an array of
-.Vt prwatch
-structures, one for each watched area established by the
-.Sy PCWATCH
-control operation.
-See
-.Sx PCWATCH
-for details.
-.Ss usage
-Contains process usage information described by a
-.Vt prusage
-structure which contains at least the following fields:
-.Bd -literal -offset 2
-typedef struct prusage {
- id_t pr_lwpid; /* lwp id. 0: process or defunct */
- int pr_count; /* number of contributing lwps */
- timestruc_t pr_tstamp; /* real time stamp, time of read() */
- timestruc_t pr_create; /* process/lwp creation time stamp */
- timestruc_t pr_term; /* process/lwp termination time stamp */
- timestruc_t pr_rtime; /* total lwp real (elapsed) time */
- timestruc_t pr_utime; /* user level CPU time */
- timestruc_t pr_stime; /* system call CPU time */
- timestruc_t pr_ttime; /* other system trap CPU time */
- timestruc_t pr_tftime; /* text page fault sleep time */
- timestruc_t pr_dftime; /* data page fault sleep time */
- timestruc_t pr_kftime; /* kernel page fault sleep time */
- timestruc_t pr_ltime; /* user lock wait sleep time */
- timestruc_t pr_slptime; /* all other sleep time */
- timestruc_t pr_wtime; /* wait-cpu (latency) time */
- timestruc_t pr_stoptime; /* stopped time */
- ulong_t pr_minf; /* minor page faults */
- ulong_t pr_majf; /* major page faults */
- ulong_t pr_nswap; /* swaps */
- ulong_t pr_inblk; /* input blocks */
- ulong_t pr_oublk; /* output blocks */
- ulong_t pr_msnd; /* messages sent */
- ulong_t pr_mrcv; /* messages received */
- ulong_t pr_sigs; /* signals received */
- ulong_t pr_vctx; /* voluntary context switches */
- ulong_t pr_ictx; /* involuntary context switches */
- ulong_t pr_sysc; /* system calls */
- ulong_t pr_ioch; /* chars read and written */
-} prusage_t;
-.Ed
-.Pp
-Microstate accounting is now continuously enabled.
-While this information was
-previously an estimate, if microstate accounting were not enabled, the current
-information is now never an estimate represents time the process has spent in
-various states.
-.Ss lstatus
-Contains a
-.Vt prheader
-structure followed by an array of
-.Vt lwpstatus
-structures, one for each active lwp in the process (see also
-.Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid Ns Pa /lwpstatus ,
-below).
-The
-.Vt prheader
-structure describes the number and size of the array entries that follow.
-.Bd -literal -offset 2
-typedef struct prheader {
- long pr_nent; /* number of entries */
- size_t pr_entsize; /* size of each entry, in bytes */
-} prheader_t;
-.Ed
-.Pp
-The
-.Vt lwpstatus
-structure may grow by the addition of elements at the end in future releases
-of the system.
-Programs must use
-.Sy pr_entsize
-in the file header to index through the array.
-These comments apply to all
-.Pa /proc
-files that include a
-.Vt prheader
-structure
-.Pf ( Pa lpsinfo
-and
-.Pa lusage ,
-below).
-.Ss lpsinfo
-Contains a
-.Vt prheader
-structure followed by an array of
-.Vt lwpsinfo
-structures, one for eachactive and zombie lwp in the process.
-See also
-.Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid Ns Pa /lwpsinfo ,
-below.
-.Ss lusage
-Contains a
-.Vt prheader
-structure followed by an array of
-.Vt prusage
-structures, one for each active lwp in the process, plus an additional element
-at the beginning that contains the summation over all defunct lwps (lwps that
-once existed but no longer exist in the process).
-Excluding the
-.Sy pr_lwpid ,
-.Sy pr_tstamp ,
-.Sy pr_create ,
-and
-.Sy pr_term
-entries, the entry-by-entry summation over all these structures is the
-definition of the process usage information obtained from the
-.Pa usage
-file. (See also
-.Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid Ns Pa /lwpusage ,
-below.)
-.Ss lwp
-A directory containing entries each of which names an active or zombie lwp
-within the process.
-These entries are themselves directories containing additional files as
-described below.
-Only the
-.Pa lwpsinfo
-file exists in the directory of a zombie lwp.
-.Sh "STRUCTURE OF" Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid
-A given directory
-.Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid
-contains the following entries:
-.Ss lwpctl
-Write-only control file.
-The messages written to this file affect the specific
-lwp rather than the representative lwp, as is the case for the process's
-.Pa ctl
-file.
-.Ss lwpname
-A buffer of
-.Dv THREAD_NAME_MAX
-bytes representing the LWP name; the buffer is
-zero-filled if the thread name is shorter than the buffer.
-If no thread name is set, the buffer contains the empty string.
-A read with a buffer shorter than
-.Dv THREAD_NAME_MAX
-bytes is not guaranteed to be NUL-terminated.
-Writing to this file will set the LWP name for the specific lwp.
-This file may not be present in older operating system versions.
-.Dv THREAD_NAME_MAX
-may increase in the future; clients should be prepared for this.
-.Ss lwpstatus
-lwp-specific state information.
-This file contains the
-.Vt lwpstatus
-structure for the specific lwp as described above for the representative lwp in
-the process's
-.Pa status
-file.
-.Ss lwpsinfo
-lwp-specific
-.Xr ps 1
-information.
-This file contains the
-.Vt lwpsinfo
-structure for the specific lwp as described above for the representative lwp in
-the process's
-.Pa psinfo
-file.
-The
-.Pa lwpsinfo
-file remains accessible after an lwp becomes a zombie.
-.Ss lwpusage
-This file contains the
-.Vt prusage
-structure for the specific lwp as described above for the process's
-.Pa usage
-file.
-.Ss gwindows
-This file exists only on SPARC based machines.
-If it is non-empty, it contains a
-.Vt gwindows_t
-structure, defined in
-.In sys/regset.h ,
-with the values of those SPARC register windows that could not be stored on
-the stack when the lwp stopped.
-Conditions under which register windows are not stored on the
-stack are: the stack pointer refers to nonexistent process memory or the stack
-pointer is improperly aligned.
-If the lwp is not stopped or if there are no
-register windows that could not be stored on the stack, the file is empty (the
-usual case).
-.Ss xregs
-Extra state registers.
-The extra state register set is architecture dependent;
-this file is empty if the system does not support extra state registers.
-If the file is non-empty, it contains an architecture dependent structure of
-type
-.Vt prxregset_t ,
-defined in
-.In procfs.h ,
-with the values of the lwp's extra state registers.
-If the lwp is not stopped, all register values are undefined.
-See also the
-.Sx PCSXREG
-control operation, below.
-.Ss asrs
-This file exists only for 64-bit SPARC V9 processes.
-It contains an
-.Vt asrset_t
-structure, defined in
-.In sys/regset.h ,
-containing the values of the lwp's platform-dependent ancillary state registers.
-If the lwp is not stopped, all register values are undefined.
-See also the
-.Sx PCSASRS
-control operation, below.
-.Ss spymaster
-For an agent lwp (see
-.Sx PCAGENT ) ,
-this file contains a
-.Vt psinfo_t
-structure that corresponds to the process that created the agent lwp at the
-time the agent was created.
-This structure is identical to that retrieved via the
-.Pa psinfo
-file, with one modification: the
-.Sy pr_time
-field does not correspond to the CPU time for the process, but rather to the
-creation time of the agent lwp.
-.Ss templates
-A directory which contains references to the active templates for the lwp,
-named by the contract type.
-Changes made to an active template descriptor do
-not affect the original template which was activated, though they do affect the
-active template.
-It is not possible to activate an active template descriptor.
-See
-.Xr contract 4 .
-.Sh CONTROL MESSAGES
-Process state changes are effected through messages written to a process's
-.Sy ctl
-file or to an individual lwp's
-.Sy lwpctl
-file.
-All control messages consist of a
-.Sy long
-that names the specific operation followed by
-additional data containing the operand, if any.
-.Pp
-Multiple control messages may be combined in a single
-.Xr write 2
-(or
-.Xr writev 2 )
-to a control file, but no partial writes are permitted.
-That is, each control message, operation code plus operand, if any, must be
-presented in its entirety to the
-.Xr write 2
-and not in pieces over several system calls.
-If a control operation fails, no subsequent operations contained in the same
-.Xr write 2
-are attempted.
-.Pp
-Descriptions of the allowable control messages follow.
-In all cases, writing a message to a control file for a process or lwp that
-has terminated elicits the error
-.Er ENOENT .
-.Ss PCSTOP PCDSTOP PCWSTOP PCTWSTOP
-When applied to the process control file,
-.Sy PCSTOP
-directs all lwps to stop and waits for them to stop,
-.Sy PCDSTOP
-directs all lwps to stop without waiting for them to stop, and
-.Sy PCWSTOP
-simply waits for all lwps to stop.
-When applied to an lwp control file,
-.Sy PCSTOP
-directs the specific lwp to stop and waits until it has stopped,
-.Sy PCDSTOP
-directs the specific lwp to stop without waiting for it to stop, and
-.Sy PCWSTOP
- simply waits for the specific lwp to stop.
-When applied to an lwp control file,
-.Sy PCSTOP
-and
-.Sy PCWSTOP
-complete when the lwp stops on an event of interest, immediately
-if already so stopped; when applied to the process control file, they complete
-when every lwp has stopped either on an event of interest or on a
-.Sy PR_SUSPENDED
-stop.
-.Pp
-.Sy PCTWSTOP
-is identical to
-.Sy PCWSTOP
-except that it enables the operation to time out, to avoid waiting forever for
-a process or lwp that may never stop on an event of interest.
-.Sy PCTWSTOP
-takes a
-.Sy long
-operand specifying a number of milliseconds; the wait will terminate
-successfully after the specified number of milliseconds even if the process or
-lwp has not stopped; a timeout value of zero makes the operation identical to
-.Sy PCWSTOP .
-.Pp
-An
-.Dq event of interest
-is either a
-.Sy PR_REQUESTED
-stop or a stop that has been specified in the process's tracing flags (set by
-.Sy PCSTRACE ,
-.Sy PCSFAULT ,
-.Sy PCSENTRY ,
-and
-.Sy PCSEXIT ) .
-.Sy PR_JOBCONTROL
- and
-.Sy PR_SUSPENDED
-stops are specifically not events of interest.
-(An lwp may stop twice due to a stop signal, first showing
-.Sy PR_SIGNALLED
-if the signal is traced and again showing
-.Sy PR_JOBCONTROL
-if the lwp is set running without clearing the signal.)
-If
-.Sy PCSTOP
-or
-.Sy PCDSTOP
-is applied to an
-lwp that is stopped, but not on an event of interest, the stop directive takes
-effect when the lwp is restarted by the competing mechanism.
-At that time, the lwp enters a
-.Sy PR_REQUESTED
-stop before executing any user-level code.
-.Pp
-A write of a control message that blocks is interruptible by a signal so that,
-for example, an
-.Xr alarm 2
-can be set to avoid waiting forever for a
-process or lwp that may never stop on an event of interest.
-If
-.Sy PCSTOP
-is interrupted, the lwp stop directives remain in effect even though the
-.Xr write 2
-returns an error.
-(Use of
-.Sy PCTWSTOP
-with a non-zero timeout is recommended over
-.Sy PCWSTOP
-with an
-.Xr alarm 2 . )
-.Pp
-A system process (indicated by the
-.Sy PR_ISSYS
-flag) never executes at user level, has no user-level address space visible
-through
-.Pa /proc ,
-and cannot be stopped.
-Applying one of these operations to a system process or any of its
-lwps elicits the error
-.Er EBUSY .
-.Ss PCRUN
-Make an lwp runnable again after a stop.
-This operation takes a
-.Vt long
-operand containing zero or more of the following flags:
-.Bl -tag -width "PRSABORT" -offset left
-.It Sy PRCSIG
-clears the current signal, if any (see
-.Sx PCCSIG ) .
-.It Sy PRCFAULT
-clears the current fault, if any (see
-.Sx PCCFAULT ) .
-.It Sy PRSTEP
-directs the lwp to execute a single machine instruction.
-On completion of the instruction, a trace trap occurs.
-If
-.Sy FLTTRACE
-is being traced, the lwp stops; otherwise, it is sent
-.Sy SIGTRAP .
-If
-.Sy SIGTRAP
-is being traced and is not blocked, the lwp stops.
-When the lwp stops on an event of interest,
-the single-step directive is cancelled, even if the stop occurs before the
-instruction is executed.
-This operation requires hardware and operating system
-support and may not be implemented on all processors.
-It is implemented on SPARC and x86-based machines.
-.It Sy PRSABORT
-is meaningful only if the lwp is in a
-.Sy PR_SYSENTRY
-stop or is marked
-.Sy PR_ASLEEP ;
-it instructs the lwp to abort execution of the system call (see
-.Sx PCSENTRY
-and
-.Sx PCSEXIT ) .
-.It Sy PRSTOP
-directs the lwp to stop again as soon as possible after resuming execution (see
-.Sx PCDSTOP ) .
-In particular, if the lwp is stopped on
-.Sy PR_SIGNALLED
-or
-.Sy PR_FAULTED ,
-the next stop will show
-.Sy PR_REQUESTED ,
-no other stop
-will have intervened, and the lwp will not have executed any user-level code.
-.El
-.Pp
-When applied to an lwp control file,
-.Sy PCRUN
-clears any outstanding
-directed-stop request and makes the specific lwp runnable.
-The operation fails with
-.Er EBUSY
-if the specific lwp is not stopped on an event of interest or
-has not been directed to stop or if the agent lwp exists and this is not the
-agent lwp (see
-.Sx PCAGENT ) .
-.Pp
-When applied to the process control file, a representative lwp is chosen for
-the operation as described for
-.Pa /proc/ Ns Em pid Ns Pa /status .
-The operation fails with
-.Er EBUSY
-if the representative lwp is not stopped on an
-event of interest or has not been directed to stop or if the agent lwp exists.
-If
-.Sy PRSTEP
-or
-.Sy PRSTOP
-was requested, the representative lwp is made
-runnable and its outstanding directed-stop request is cleared; otherwise all
-outstanding directed-stop requests are cleared and, if it was stopped on an
-event of interest, the representative lwp is marked
-.Sy PR_REQUESTED .
-If, as a consequence, all lwps are in the
-.Sy PR_REQUESTED
-or
-.Sy PR_SUSPENDED
-stop state, all lwps showing
-.Sy PR_REQUESTED
-are made runnable.
-.Ss PCSTRACE
-Define a set of signals to be traced in the process.
-The receipt of one of these signals by an lwp causes the lwp to stop.
-The set of signals is defined using an operand
-.Sy sigset_t
-contained in the control message.
-Receipt of
-.Sy SIGKILL
-cannot be traced; if specified, it is silently ignored.
-.Pp
-If a signal that is included in an lwp's held signal set (the signal mask) is
-sent to the lwp, the signal is not received and does not cause a stop until it
-is removed from the held signal set, either by the lwp itself or by setting the
-held signal set with
-.Sy PCSHOLD .
-.Ss PCCSIG
-The current signal, if any, is cleared from the specific or representative lwp.
-.Ss PCSSIG
-The current signal and its associated signal information for the specific or
-representative lwp are set according to the contents of the operand
-.Vt siginfo
-structure (see
-.In sys/siginfo.h ) .
-If the specified signal number is zero, the current signal is cleared.
-The semantics of this operation are different from those of
-.Xr kill 2
-in that the signal is delivered to the lwp immediately after execution is
-resumed (even if it is being blocked) and an additional
-.Sy PR_SIGNALLED
-stop does not intervene even if the signal is traced.
-Setting the current signal to
-.Sy SIGKILL
-terminates the process immediately.
-.Ss PCKILL
-If applied to the process control file, a signal is sent to the process with
-semantics identical to those of
-.Xr kill 2
-If applied to an lwp control file, a directed signal is sent to the specific
-lwp.
-The signal is named in a
-.Vt long
-operand contained in the message.
-Sending
-.Sy SIGKILL
-terminates the process immediately.
-.Ss PCUNKILL
-A signal is deleted, that is, it is removed from the set of pending signals.
-If applied to the process control file, the signal is deleted from the process's
-pending signals.
-If applied to an lwp control file, the signal is deleted from
-the lwp's pending signals.
-The current signal (if any) is unaffected.
-The signal is named in a
-.Sy long
-operand in the control message.
-It is an error
-.Pq Er EINVAL
-to attempt to delete
-.Sy SIGKILL .
-.Ss PCSHOLD
-Set the set of held signals for the specific or representative lwp (signals
-whose delivery will be blocked if sent to the lwp).
-The set of signals is specified with a
-.Vt sigset_t
-operand.
-.Sy SIGKILL
-and
-.Sy SIGSTOP
-cannot be held; if specified, they are silently ignored.
-.Ss PCSFAULT
-Define a set of hardware faults to be traced in the process.
-On incurring one of these faults, an lwp stops.
-The set is defined via the operand
-.Vt fltset_t
-structure.
-Fault names are defined in
-.In sys/fault.h
-and include the following.
-Some of these may not occur on all processors; there may
-be processor-specific faults in addition to these.
-.Bl -tag -width "FLTACCESS" -offset indent
-.It Sy FLTILL
-illegal instruction
-.It Sy FLTPRIV
-privileged instruction
-.It Sy FLTBPT
-breakpoint trap
-.It Sy FLTTRACE
-trace trap (single-step)
-.It Sy FLTWATCH
-watchpoint trap
-.It Sy FLTACCESS
-memory access fault (bus error)
-.It Sy FLTBOUNDS
-memory bounds violation
-.It Sy FLTIOVF
-integer overflow
-.It Sy FLTIZDIV
-integer zero divide
-.It Sy FLTFPE
-floating-point exception
-.It Sy FLTSTACK
-unrecoverable stack fault
-.It Sy FLTPAGE
-recoverable page fault
-.El
-.Pp
-When not traced, a fault normally results in the posting of a signal to the lwp
-that incurred the fault.
-If an lwp stops on a fault, the signal is posted to
-the lwp when execution is resumed unless the fault is cleared by
-.Sy PCCFAULT
-or by the
-.Sy PRCFAULT
-option of
-.Sy PCRUN .
-.Sy FLTPAGE
-is an exception; no signal is posted.
-The
-.Sy pr_info
-field in the
-.Vt lwpstatus
-structure identifies the signal to be sent and contains machine-specific
-information about the fault.
-.Ss PCCFAULT
-The current fault, if any, is cleared; the associated signal will not be sent
-to the specific or representative lwp.
-.Ss PCSENTRY PCSEXIT
-These control operations instruct the process's lwps to stop on entry to or
-exit from specified system calls.
-The set of system calls to be traced is defined via an operand
-.Vt sysset_t
-structure.
-.Pp
-When entry to a system call is being traced, an lwp stops after having begun
-the call to the system but before the system call arguments have been fetched
-from the lwp.
-When exit from a system call is being traced, an lwp stops on completion of
-the system call just prior to checking for signals and returning to user level.
-At this point, all return values have been stored into the lwp's registers.
-.Pp
-If an lwp is stopped on entry to a system call
-.Pq Sy PR_SYSENTRY
-or when sleeping in an interruptible system call
-.Pf ( Sy PR_ASLEEP
-is set), it may be instructed to go directly to system call exit by specifying
-the
-.Sy PRSABORT
-flag in a
-.Sy PCRUN
-control message.
-Unless exit from the system call is being traced, the lwp returns to user
-level showing
-.Er EINTR .
-.Ss PCWATCH
-Set or clear a watched area in the controlled process from a
-.Vt prwatch
-structure operand:
-.Bd -literal -offset 2
-typedef struct prwatch {
- uintptr_t pr_vaddr; /* virtual address of watched area */
- size_t pr_size; /* size of watched area in bytes */
- int pr_wflags; /* watch type flags */
-} prwatch_t;
-.Ed
-.Pp
-.Sy pr_vaddr
-specifies the virtual address of an area of memory to be watched
-in the controlled process.
-.Sy pr_size
-specifies the size of the area, in bytes.
-.Sy pr_wflags
-specifies the type of memory access to be monitored as a
-bit-mask of the following flags:
-.Bl -tag -width "WA_TRAPAFTER" -offset indent
-.It Sy WA_READ
-read access
-.It Sy WA_WRITE
-write access
-.It Sy WA_EXEC
-execution access
-.It Sy WA_TRAPAFTER
-trap after the instruction completes
-.El
-.Pp
-If
-.Sy pr_wflags
-is non-empty, a watched area is established for the virtual
-address range specified by
-.Sy pr_vaddr
-and
-.Sy pr_size .
-If
-.Sy pr_wflags
-is empty, any previously-established watched area starting at the specified
-virtual address is cleared;
-.Sy pr_size
-is ignored.
-.Pp
-A watchpoint is triggered when an lwp in the traced process makes a memory
-reference that covers at least one byte of a watched area and the memory
-reference is as specified in
-.Sy pr_wflags .
-When an lwp triggers a watchpoint, it incurs a watchpoint trap.
-If
-.Sy FLTWATCH
-is being traced, the lwp stops; otherwise, it is sent a
-.Sy SIGTRAP
-signal; if
-.Sy SIGTRAP
-is being traced and is not blocked, the lwp stops.
-.Pp
-The watchpoint trap occurs before the instruction completes unless
-.Sy WA_TRAPAFTER
-was specified, in which case it occurs after the instruction completes.
-If it occurs before completion, the memory is not modified.
-If it occurs after completion, the memory is modified (if the access is a write
-access).
-.Pp
-Physical i/o is an exception for watchpoint traps.
-In this instance, there is no guarantee that memory before the watched area
-has already been modified (or in the case of
-.Sy WA_TRAPAFTER ,
-that the memory following the watched area
-has not been modified) when the watchpoint trap occurs and the lwp stops.
-.Pp
-.Sy pr_info
-in the
-.Vt lwpstatus
-structure contains information pertinent to the watchpoint trap.
-In particular, the
-.Sy si_addr
-field contains the
-virtual address of the memory reference that triggered the watchpoint, and the
-.Sy si_code
-field contains one of
-.Sy TRAP_RWATCH ,
-.Sy TRAP_WWATCH ,
-or
-.Sy TRAP_XWATCH ,
-indicating read, write, or execute access, respectively.
-The
-.Sy si_trapafter
-field is zero unless
-.Sy WA_TRAPAFTER
-is in effect for this watched area; non-zero indicates that the current
-instruction is not the instruction that incurred the watchpoint trap.
-The
-.Sy si_pc
-field contains the virtual address of the instruction that incurred the trap.
-.Pp
-A watchpoint trap may be triggered while executing a system call that makes
-reference to the traced process's memory.
-The lwp that is executing the system call incurs the watchpoint trap while
-still in the system call.
-If it stops as a result, the
-.Vt lwpstatus
-structure contains the system call number and its arguments.
-If the lwp does not stop, or if it is set running again without
-clearing the signal or fault, the system call fails with
-.Er EFAULT .
-If
-.Sy WA_TRAPAFTER
-was specified, the memory reference will have completed and
-the memory will have been modified (if the access was a write access) when the
-watchpoint trap occurs.
-.Pp
-If more than one of
-.Sy WA_READ ,
-.Sy WA_WRITE ,
-and
-.Sy WA_EXEC
-is specified for a watched area, and a single instruction incurs more than one
-of the specified types, only one is reported when the watchpoint trap occurs.
-The precedence is
-.Sy WA_EXEC ,
-.Sy WA_READ ,
-.Sy WA_WRITE
-.Pf ( Sy WA_EXEC
-and
-.Sy WA_READ
-take precedence over
-.Sy WA_WRITE ) ,
-unless
-.Sy WA_TRAPAFTER
-was specified, in which case it is
-.Sy WA_WRITE ,
-.Sy WA_READ ,
-.Sy WA_EXEC
-.Pf ( Sy WA_WRITE
-takes precedence).
-.Pp
-.Sy PCWATCH
-fails with
-.Er EINVAL
-if an attempt is made to specify overlapping watched areas or if
-.Sy pr_wflags
-contains flags other than those specified above.
-It fails with
-.Er ENOMEM
-if an attempt is made to establish more watched areas than the system can
-support (the system can support thousands).
-.Pp
-The child of a
-.Xr vfork 2
-borrows the parent's address space.
-When a
-.Xr vfork 2
-is executed by a traced process, all watched areas established
-for the parent are suspended until the child terminates or performs an
-.Xr exec 2 .
-Any watched areas established independently in the child are
-cancelled when the parent resumes after the child's termination or
-.Xr exec 2 .
-.Sy PCWATCH
-fails with
-.Er EBUSY
-if applied to the parent of a
-.Xr vfork 2
-before the child has terminated or performed an
-.Xr exec 2 .
-The
-.Sy PR_VFORKP
-flag is set in the
-.Sy pstatus
-structure for such a parent process.
-.Pp
-Certain accesses of the traced process's address space by the operating system
-are immune to watchpoints.
-The initial construction of a signal stack frame when a signal is delivered to
-an lwp will not trigger a watchpoint trap even if the new frame covers watched
-areas of the stack.
-Once the signal handler is entered, watchpoint traps occur normally.
-On SPARC based machines, register window overflow and underflow will not
-trigger watchpoint traps, even if the register window save areas cover watched
-areas of the stack.
-.Pp
-Watched areas are not inherited by child processes, even if the traced
-process's inherit-on-fork mode,
-.Sy PR_FORK ,
-is set (see
-.Sy PCSET ,
-below).
-All watched areas are cancelled when the traced process performs a successful
-.Xr exec 2 .
-.Ss PCSET PCUNSET
-.Sy PCSET
-sets one or more modes of operation for the traced process.
-.Sy PCUNSET
-unsets these modes.
-The modes to be set or unset are specified by flags in an operand
-.Sy long
-in the control message:
-.Bl -tag -offset left -width "PR_MSFORK"
-.It Sy PR_FORK
-(inherit-on-fork): When set, the process's tracing flags and its
-inherit-on-fork mode are inherited by the child of a
-.Xr fork 2 ,
-.Xr fork1 2 ,
-or
-.Xr vfork 2 .
-When unset, child processes start with all tracing flags cleared.
-.It Sy PR_RLC
-(run-on-last-close): When set and the last writable
-.Pa /proc
-file descriptor referring to the traced process or any of its lwps is closed,
-all of the process's tracing flags and watched areas are cleared, any
-outstanding stop directives are canceled, and if any lwps are stopped on
-events of interest, they are set running as though
-.Sy PCRUN
-had been applied to them.
-When unset, the process's tracing flags and watched areas are retained and
-lwps are not set running on last close.
-.It Sy PR_KLC
-(kill-on-last-close): When set and the last writable
-.Pa /proc
-file descriptor referring to the traced process or any of its lwps is closed,
-the process is terminated with
-.Sy SIGKILL .
-.It Sy PR_ASYNC
-(asynchronous-stop): When set, a stop on an event of interest by one lwp does
-not directly affect any other lwp in the process.
-When unset and an lwp stops on an event of interest other than
-.Sy PR_REQUESTED ,
-all other lwps in the process are directed to stop.
-.It Sy PR_MSACCT
-(microstate accounting): Microstate accounting is now continuously enabled.
-This flag is deprecated and no longer has any effect upon microstate
-accounting.
-Applications may toggle this flag; however, microstate accounting
-will remain enabled regardless.
-.It Sy PR_MSFORK
-(inherit microstate accounting): All processes now inherit microstate
-accounting, as it is continuously enabled.
-This flag has been deprecated and its use no longer has any effect upon the
-behavior of microstate accounting.
-.It Sy PR_BPTADJ
-(breakpoint trap pc adjustment): On x86-based machines, a breakpoint trap
-leaves the program counter (the
-.Sy EIP )
-referring to the breakpointed instruction plus one byte.
-When
-.Sy PR_BPTADJ
-is set, the system will adjust the program counter back to the location of the
-breakpointed instruction when the lwp stops on a breakpoint.
-This flag has no effect on SPARC based machines, where breakpoint traps leave
-the program counter referring to the breakpointed instruction.
-.It Sy PR_PTRACE
-(ptrace-compatibility): When set, a stop on an event of interest by the traced
-process is reported to the parent of the traced process by
-.Xr wait 3C ,
-.Sy SIGTRAP
-is sent to the traced process when it executes a successful
-.Xr exec 2 ,
-setuid/setgid flags are not honored for execs performed by the
-traced process, any exec of an object file that the traced process cannot read
-fails, and the process dies when its parent dies.
-This mode is deprecated; it is provided only to allow
-.Xr ptrace 3C
-to be implemented as a library function using
-.Pa /proc .
-.El
-.Pp
-It is an error
-.Pq Er EINVAL
-to specify flags other than those described above
-or to apply these operations to a system process.
-The current modes are reported in the
-.Sy pr_flags
-field of
-.Pa /proc/ Ns Em pid Ns Pa /status
-and
-.Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwp Ns Pa /lwpstatus .
-.Ss PCSREG
-Set the general registers for the specific or representative lwp according to
-the operand
-.Vt prgregset_t
-structure.
-.Pp
-On SPARC based systems, only the condition-code bits of the processor-status
-register (R_PSR) of SPARC V8 (32-bit) processes can be modified by
-.Sy PCSREG .
-Other privileged registers cannot be modified at all.
-.Pp
-On x86-based systems, only certain bits of the flags register (EFL) can be
-modified by
-.Sy PCSREG :
-these include the condition codes, direction-bit, and overflow-bit.
-.Pp
-.Sy PCSREG
-fails with
-.Er EBUSY
-if the lwp is not stopped on an event of interest.
-.Ss PCSVADDR
-Set the address at which execution will resume for the specific or
-representative lwp from the operand
-.Vt long .
-On SPARC based systems, both %pc and %npc are set, with %npc set to the
-instruction following the virtual address.
-On x86-based systems, only %eip is set.
-.Sy PCSVADDR
-fails with
-.Er EBUSY
-if the lwp is not stopped on an event of interest.
-.Ss PCSFPREG
-Set the floating-point registers for the specific or representative lwp
-according to the operand
-.Vt prfpregset_t
-structure.
-An error
-.Pq Er EINVAL
-is returned if the system does not support floating-point operations (no
-floating-point hardware and the system does not emulate floating-point machine
-instructions).
-.Sy PCSFPREG
-fails with
-.Er EBUSY
-if the lwp is not stopped on an event of interest.
-.Ss PCSXREG
-Set the extra state registers for the specific or representative lwp according
-to the architecture-dependent operand
-.Vt prxregset_t
-structure.
-An error
-.Pq Er EINVAL
-is returned if the system does not support extra state registers.
-.Sy PCSXREG
-fails with
-.Er EBUSY
-if the lwp is not stopped on an event of interest.
-.Ss PCSASRS
-Set the ancillary state registers for the specific or representative lwp
-according to the SPARC V9 platform-dependent operand
-.Vt asrset_t
-structure.
-An error
-.Pq Er EINVAL
-is returned if either the target process or the
-controlling process is not a 64-bit SPARC V9 process.
-Most of the ancillary state registers are privileged registers that cannot be
-modified.
-Only those that can be modified are set; all others are silently ignored.
-.Sy PCSASRS
-fails with
-.Er EBUSY
-if the lwp is not stopped on an event of interest.
-.Ss PCAGENT
-Create an agent lwp in the controlled process with register values from the
-operand
-.Vt prgregset_t
-structure (see
-.Sy PCSREG ,
-above).
-The agent lwp is created in the stopped state showing
-.Sy PR_REQUESTED
-and with its held signal set (the signal mask) having all signals except
-.Sy SIGKILL
-and
-.Sy SIGSTOP
-blocked.
-.Pp
-The
-.Sy PCAGENT
-operation fails with
-.Er EBUSY
-unless the process is fully stopped via
-.Pa /proc ,
-that is, unless all of the lwps in the process are
-stopped either on events of interest or on
-.Sy PR_SUSPENDED ,
-or are stopped on
-.Sy PR_JOBCONTROL
-and have been directed to stop via
-.Sy PCDSTOP .
-It fails with
-.Er EBUSY
-if an agent lwp already exists.
-It fails with
-.Er ENOMEM
-if system resources for creating new lwps have been exhausted.
-.Pp
-Any
-.Sy PCRUN
-operation applied to the process control file or to the control
-file of an lwp other than the agent lwp fails with
-.Er EBUSY
-as long as the agent lwp exists.
-The agent lwp must be caused to terminate by executing the
-.Sy SYS_lwp_exit
-system call trap before the process can be restarted.
-.Pp
-Once the agent lwp is created, its lwp-ID can be found by reading the process
-status file.
-To facilitate opening the agent lwp's control and status files,
-the directory name
-.Pa /proc/ Ns Em pid Ns Pa /lwp/agent
-is accepted for lookup operations as an invisible alias for
-.Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid ,
-.Em lwpid
-being the lwp-ID of the agent lwp (invisible in the sense that the name
-.Dq agent
-does not appear in a directory listing of
-.Pa /proc/ Ns Em pid Ns Pa /lwp
-obtained from
-.Xr ls 1 ,
-.Xr getdents 2 ,
-or
-.Xr readdir 3C .
-.Pp
-The purpose of the agent lwp is to perform operations in the controlled process
-on behalf of the controlling process: to gather information not directly
-available via
-.Pa /proc
-files, or in general to make the process change state
-in ways not directly available via
-.Pa /proc
-control operations.
-To make use of an agent lwp, the controlling process must be capable of making
-it execute system calls (specifically, the
-.Sy SYS_lwp_exit
-system call trap).
-The register values given to the agent lwp on creation are typically the
-registers of the representative lwp, so that the agent lwp can use its stack.
-.Pp
-If the controlling process neglects to force the agent lwp to execute the
-.Sy SYS_lwp_exit
-system call (due to either logic error or fatal failure on
-the part of the controlling process), the agent lwp will remain in the target
-process.
-For purposes of being able to debug these otherwise rogue agents,
-information as to the creator of the agent lwp is reflected in that lwp's
-.Pa spymaster
-file in
-.Pa /proc .
-Should the target process generate a core
-dump with the agent lwp in place, this information will be available via the
-.Sy NT_SPYMASTER
-note in the core file (see
-.Xr core 4 ) .
-.Pp
-The agent lwp is not allowed to execute any variation of the
-.Sy SYS_fork
-or
-.Sy SYS_exec
-system call traps.
-Attempts to do so yield
-.Er ENOTSUP
-to the agent lwp.
-.Pp
-Symbolic constants for system call trap numbers like
-.Sy SYS_lwp_exit
-and
-.Sy SYS_lwp_create
-can be found in the header file
-.In sys/syscall.h .
-.Ss PCREAD PCWRITE
-Read or write the target process's address space via a
-.Vt priovec
-structure operand:
-.Bd -literal -offset 2
-typedef struct priovec {
- void *pio_base; /* buffer in controlling process */
- size_t pio_len; /* size of read/write request in bytes */
- off_t pio_offset; /* virtual address in target process */
-} priovec_t;
-.Ed
-.Pp
-These operations have the same effect as
-.Xr pread 2
-and
-.Xr pwrite 2 ,
-respectively, of the target process's address space file.
-The difference is that more than one
-.Sy PCREAD
-or
-.Sy PCWRITE
-control operation can be
-written to the control file at once, and they can be interspersed with other
-control operations in a single write to the control file.
-This is useful, for example, when planting many breakpoint instructions in
-the process's address space, or when stepping over a breakpointed instruction.
-Unlike
-.Xr pread 2
-and
-.Xr pwrite 2 ,
-no provision is made for partial reads or writes; if the
-operation cannot be performed completely, it fails with
-.Er EIO .
-.Ss PCNICE
-The traced process's
-.Xr nice 2
-value is incremented by the amount in the
-operand
-.Vt long .
-Only a process with the
-.Brq Sy PRIV_PROC_PRIOCNTL
-privilege asserted in its effective set can better a process's priority in this
-way, but any user may lower the priority.
-This operation is not meaningful for all scheduling classes.
-.Ss PCSCRED
-Set the target process credentials to the values contained in the
-.Vt prcred_t
-structure operand (see
-.Pa /proc/ Ns Em pid Ns Pa /cred ) .
-The
-effective, real, and saved user-IDs and group-IDs of the target process are
-set.
-The target process's supplementary groups are not changed; the
-.Sy pr_ngroups
-and
-.Sy pr_groups
-members of the structure operand are ignored.
-Only the privileged processes can perform this operation; for all
-others it fails with
-.Er EPERM .
-.Ss PCSCREDX
-Operates like
-.Sy PCSCRED
-but also sets the supplementary groups; the length
-of the data written with this control operation should be "sizeof
-.Pq Vt prcred_t
-+ sizeof
-.Pq Vt gid_t
-* (#groups - 1)".
-.Ss PCSPRIV
-Set the target process privilege to the values contained in the
-.Vt prpriv_t
-operand (see
-.Pa /proc/pid/priv ) .
-The effective, permitted, inheritable, and
-limit sets are all changed.
-Privilege flags can also be set.
-The process is made privilege aware unless it can relinquish privilege awareness.
-See
-.Xr privileges 5 .
-.Pp
-The limit set of the target process cannot be grown.
-The other privilege sets must be subsets of the intersection of the effective set
-of the calling process with the new limit set of the target process or subsets of
-the original values of the sets in the target process.
-.Pp
-If any of the above restrictions are not met,
-.Er EPERM
-is returned.
-If the structure written is improperly formatted,
-.Er EINVAL
-is returned.
-.Sh PROGRAMMING NOTES
-For security reasons, except for the
-.Sy psinfo ,
-.Sy usage ,
-.Sy lpsinfo ,
-.Sy lusage ,
-.Sy lwpsinfo ,
-and
-.Sy lwpusage
-files, which are world-readable, and except for privileged processes, an open
-of a
-.Pa /proc
-file fails unless both the user-ID and group-ID of the caller match those of
-the traced process and the process's object file is readable by the caller.
-The effective set of the caller is a superset of both the inheritable and the
-permitted set of the target process.
-The limit set of the caller is a superset of the limit set of the target
-process.
-Except for the world-readable files just mentioned, files corresponding to
-setuid and setgid processes can be opened only by the appropriately privileged
-process.
-.Pp
-A process that is missing the basic privilege
-.Brq Sy PRIV_PROC_INFO
-cannot see any processes under
-.Pa /proc
-that it cannot send a signal to.
-.Pp
-A process that has
-.Brq Sy PRIV_PROC_OWNER
-asserted in its effective set can open any file for reading.
-To manipulate or control a process, the controlling process must have at least
-as many privileges in its effective set as the target process has in its
-effective, inheritable, and permitted sets.
-The limit set of the controlling process must be a superset of the limit set
-of the target process.
-Additional restrictions apply if any of the uids of the target process are 0.
-See
-.Xr privileges 5 .
-.Pp
-Even if held by a privileged process, an open process or lwp file descriptor
-(other than file descriptors for the world-readable files) becomes invalid if
-the traced process performs an
-.Xr exec 2
-of a setuid/setgid object file or
-an object file that the traced process cannot read.
-Any operation performed on an invalid file descriptor, except
-.Xr close 2 ,
-fails with
-.Er EAGAIN .
-In this situation, if any tracing flags are set and the process or any lwp
-file descriptor is open for writing, the process will have been directed to
-stop and its run-on-last-close flag will have been set (see
-.Sx PCSET ) .
-This enables a controlling process (if it has permission) to reopen the
-.Pa /proc
-files to get new valid file descriptors, close the invalid file descriptors,
-unset the run-on-last-close flag (if desired), and proceed.
-Just closing the invalid file descriptors causes the traced process to resume
-execution with all tracing flags cleared.
-Any process not currently open for writing via
-.Pa /proc ,
-but that has left-over tracing flags from a previous open, and that executes
-a setuid/setgid or unreadable object file, will not be stopped but will have
-all its tracing flags cleared.
-.Pp
-To wait for one or more of a set of processes or lwps to stop or terminate,
-.Pa /proc
-file descriptors (other than those obtained by opening the
-.Pa cwd
-or
-.Pa root
-directories or by opening files in the
-.Pa fd
-or
-.Pa object
-directories) can be used in a
-.Xr poll 2
-system call.
-When requested and returned, either of the polling events
-.Sy POLLPRI
-or
-.Sy POLLWRNORM
-indicates that the process or lwp stopped on an event of
-interest.
-Although they cannot be requested, the polling events
-.Sy POLLHUP ,
-.Sy POLLERR ,
-and
-.Sy POLLNVAL
-may be returned.
-.Sy POLLHUP
-indicates that the process or lwp has terminated.
-.Sy POLLERR
-indicates that the file descriptor has become invalid.
-.Sy POLLNVAL
-is returned immediately if
-.Sy POLLPRI
-or
-.Sy POLLWRNORM
-is requested on a file descriptor referring to a system process (see
-.Sx PCSTOP ) .
-The requested events may be empty to wait simply for termination.
-.Sh FILES
-.Bl -tag -compact -width Ds
-.It Pa /proc
-directory (list of processes)
-.It Pa /proc/ Ns Em pid
-specific process directory
-.It Pa /proc/self
-alias for a process's own directory
-.It Pa /proc/ Ns Em pid Ns Pa /as
-address space file
-.It Pa /proc/ Ns Em pid Ns Pa /ctl
-process control file
-.It Pa /proc/ Ns Em pid Ns Pa /status
-process status
-.It Pa /proc/ Ns Em pid Ns Pa /lstatus
-array of lwp status structs
-.It Pa /proc/ Ns Em pid Ns Pa /psinfo
-process
-.Xr ps 1
-info
-.It Pa /proc/ Ns Em pid Ns Pa /lpsinfo
-array of lwp
-.Xr ps 1
-info structs
-.It Pa /proc/ Ns Em pid Ns Pa /map
-address space map
-.It Pa /proc/ Ns Em pid Ns Pa /xmap
-extended address space map
-.It Pa /proc/ Ns Em pid Ns Pa /rmap
-reserved address map
-.It Pa /proc/ Ns Em pid Ns Pa /cred
-process credentials
-.It Pa /proc/ Ns Em pid Ns Pa /priv
-process privileges
-.It Pa /proc/ Ns Em pid Ns Pa /sigact
-process signal actions
-.It Pa /proc/ Ns Em pid Ns Pa /auxv
-process aux vector
-.It Pa /proc/ Ns Em pid Ns Pa /ldt
-process
-.Sy LDT
-(x86 only)
-.It Pa /proc/ Ns Em pid Ns Pa /usage
-process usage
-.It Pa /proc/ Ns Em pid Ns Pa /lusage
-array of lwp usage structs
-.It Pa /proc/ Ns Em pid Ns Pa /path
-symbolic links to process open files
-.It Pa /proc/ Ns Em pid Ns Pa /pagedata
-process page data
-.It Pa /proc/ Ns Em pid Ns Pa /watch
-active watchpoints
-.It Pa /proc/ Ns Em pid Ns Pa /cwd
-alias for the current working directory
-.It Pa /proc/ Ns Em pid Ns Pa /root
-alias for the root directory
-.It Pa /proc/ Ns Em pid Ns Pa /fd
-directory (list of open files)
-.It Pa /proc/ Ns Em pid Ns Pa /fd/*
-aliases for process's open files
-.It Pa /proc/ Ns Em pid Ns Pa /object
-directory (list of mapped files)
-.It Pa /proc/ Ns Em pid Ns Pa /object/a.out
-alias for process's executable file
-.It Pa /proc/ Ns Em pid Ns Pa /object/*
-aliases for other mapped files
-.It Pa /proc/ Ns Em pid Ns Pa /lwp
-directory (list of lwps)
-.It Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid
-specific lwp directory
-.It Pa /proc/ Ns Em pid Ns Pa /lwp/agent
-alias for the agent lwp directory
-.It Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid Ns Pa /lwpctl
-lwp control file
-.It Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid Ns Pa /lwpstatus
-lwp status
-.It Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid Ns Pa /lwpsinfo
-lwp
-.Xr ps 1
-info
-.It Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid Ns Pa /lwpusage
-lwp usage
-.It Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid Ns Pa /gwindows
-register windows (SPARC only)
-.It Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid Ns Pa /xregs
-extra state registers
-.It Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid Ns Pa /asrs
-ancillary state registers (SPARC V9 only)
-.It Pa /proc/ Ns Em pid Ns Pa /lwp/ Ns Em lwpid Ns Pa /spymaster
-For an agent LWP, the controlling process
-.El
-.Sh DIAGNOSTICS
-Errors that can occur in addition to the errors normally associated with file
-system access:
-.Bl -tag -width "EOVERFLOW" -offset left
-.It Er E2BIG
-Data to be returned in a
-.Xr read 2
-of the page data file exceeds the size of the read buffer provided by the
-caller.
-.It Er EACCES
-An attempt was made to examine a process that ran under a different uid than
-the controlling process and
-.Brq Sy PRIV_PROC_OWNER
-was not asserted in the effective set.
-.It Er EAGAIN
-The traced process has performed an
-.Xr exec 2
-of a setuid/setgid object
-file or of an object file that it cannot read; all further operations on the
-process or lwp file descriptor (except
-.Xr close 2 )
-elicit this error.
-.It Er EBUSY
-.Sy PCSTOP ,
-.Sy PCDSTOP ,
-.Sy PCWSTOP , or
-.Sy PCTWSTOP
-was applied to a system process; an exclusive
-.Xr open 2
-was attempted on a
-.Pa /proc
-file for a process already open for writing;
-.Sy PCRUN ,
-.Sy PCSREG ,
-.Sy PCSVADDR ,
-.Sy PCSFPREG ,
-or
-.Sy PCSXREG
-was applied to a process or
-lwp not stopped on an event of interest; an attempt was made to mount
-.Pa /proc
-when it was already mounted;
-.Sy PCAGENT
-was applied to a process
-that was not fully stopped or that already had an agent lwp.
-.It Er EINVAL
-In general, this means that some invalid argument was supplied to a system
-call.
-A non-exhaustive list of conditions eliciting this error includes: a
-control message operation code is undefined; an out-of-range signal number was
-specified with
-.Sy PCSSIG ,
-.Sy PCKILL ,
-or
-.Sy PCUNKILL ;
-.Sy SIGKILL
-was specified with
-.Sy PCUNKILL ;
-.Sy PCSFPREG
-was applied on a system that does not support floating-point operations;
-.Sy PCSXREG
-was applied on a system that does not support extra state registers.
-.It Er EINTR
-A signal was received by the controlling process while waiting for the traced
-process or lwp to stop via
-.Sy PCSTOP ,
-.Sy PCWSTOP ,
-or
-.Sy PCTWSTOP .
-.It Er EIO
-A
-.Xr write 2
-was attempted at an illegal address in the traced process.
-.It Er ENOENT
-The traced process or lwp has terminated after being opened.
-The basic privilege
-.Brq Sy PRIV_PROC_INFO
-is not asserted in the effective set of the calling process and the calling
-process cannot send a signal to the target process.
-.It Er ENOMEM
-The system-imposed limit on the number of page data file descriptors was
-reached on an open of
-.Pa /proc/ Ns Em pid Ns Pa /pagedata ;
-an attempt was made
-with
-.Sy PCWATCH
-to establish more watched areas than the system can support;
-the
-.Sy PCAGENT
-operation was issued when the system was out of resources for
-creating lwps.
-.It Er ENOSYS
-An attempt was made to perform an unsupported operation (such as
-.Xr creat 2 ,
-.Xr link 2 ,
-or
-.Xr unlink 2 )
-on an entry in
-.Pa /proc .
-.It Er EOVERFLOW
-A 32-bit controlling process attempted to read or write the
-.Pa as
-file or attempted to read the
-.Pa map ,
-.Pa rmap ,
-or
-.Pa pagedata
-file of a 64-bit target process.
-A 32-bit controlling process attempted to apply one of the
-control operations
-.Sy PCSREG ,
-.Sy PCSXREG ,
-.Sy PCSVADDR ,
-.Sy PCWATCH ,
-.Sy PCAGENT ,
-.Sy PCREAD ,
-.Sy PCWRITE
-to a 64-bit target process.
-.It Er EPERM
-The process that issued the
-.Sy PCSCRED
-or
-.Sy PCSCREDX
-operation did not have the
-.Brq Sy PRIV_PROC_SETID
-privilege asserted in its effective set, or
-the process that issued the
-.Sy PCNICE
-operation did not have the
-.Brq Sy PRIV_PROC_PRIOCNTL
-in its effective set.
-.Pp
-An attempt was made to control a process of which the E, P, and I privilege
-sets were not a subset of the effective set of the controlling process or the
-limit set of the controlling process is not a superset of limit set of the
-controlled process.
-.Pp
-Any of the uids of the target process are
-.Sy 0
-or an attempt was made to change any of the uids to
-.Sy 0
-using
-.Sy PCSCRED
-and the security policy imposed additional restrictions.
-See
-.Xr privileges 5 .
-.El
-.Sh SEE ALSO
-.Xr ls 1 ,
-.Xr ps 1 ,
-.Xr chroot 1M ,
-.Xr alarm 2 ,
-.Xr brk 2 ,
-.Xr chdir 2 ,
-.Xr chroot 2 ,
-.Xr close 2 ,
-.Xr creat 2 ,
-.Xr dup 2 ,
-.Xr exec 2 ,
-.Xr fcntl 2 ,
-.Xr fork 2 ,
-.Xr fork1 2 ,
-.Xr fstat 2 ,
-.Xr getdents 2 ,
-.Xr getustack 2 ,
-.Xr kill 2 ,
-.Xr lseek 2 ,
-.Xr mmap 2 ,
-.Xr nice 2 ,
-.Xr open 2 ,
-.Xr poll 2 ,
-.Xr pread 2 ,
-.Xr pwrite 2 ,
-.Xr read 2 ,
-.Xr readlink 2 ,
-.Xr readv 2 ,
-.Xr shmget 2 ,
-.Xr sigaction 2 ,
-.Xr sigaltstack 2 ,
-.Xr vfork 2 ,
-.Xr write 2 ,
-.Xr writev 2 ,
-.Xr _stack_grow 3C ,
-.Xr pthread_create 3C ,
-.Xr pthread_join 3C ,
-.Xr ptrace 3C ,
-.Xr readdir 3C ,
-.Xr thr_create 3C ,
-.Xr thr_join 3C ,
-.Xr wait 3C ,
-.Xr siginfo.h 3HEAD ,
-.Xr signal.h 3HEAD ,
-.Xr types32.h 3HEAD ,
-.Xr ucontext.h 3HEAD ,
-.Xr contract 4 ,
-.Xr core 4 ,
-.Xr process 4 ,
-.Xr lfcompile 5 ,
-.Xr privileges 5 ,
-.Xr security-flags 5
-.Sh NOTES
-Descriptions of structures in this document include only interesting structure
-elements, not filler and padding fields, and may show elements out of order for
-descriptive clarity.
-The actual structure definitions are contained in
-.In procfs.h .
-.Sh BUGS
-Because the old
-.Xr ioctl 2 Ns -based
-version of
-.Pa /proc
-is currently supported for binary compatibility with old applications, the
-top-level directory for a process,
-.Pa /proc/ Ns Em pid ,
-is not world-readable, but it is world-searchable.
-Thus, anyone can open
-.Pa /proc/ Ns Em pid Ns Pa /psinfo
-even though
-.Xr ls 1
-applied to
-.Pa /proc/ Ns Em pid
-will fail for anyone but the owner or an appropriately privileged process.
-Support for the old
-.Xr ioctl 2 Ns -based
-version of
-.Pa /proc
-will be dropped in a future release, at which time the top-level directory for
-a process will be made world-readable.
-.Pp
-On SPARC based machines, the types
-.Sy gregset_t
-and
-.Sy fpregset_t
-defined in
-.In sys/regset.h
-are similar to but not the same as the types
-.Sy prgregset_t
-and
-.Sy prfpregset_t
-defined in
-.In procfs.h .