10229 Some man pages have incorrect cross-references
1 LIBPROC(3LIB) Interface Libraries LIBPROC(3LIB)
2
3 NAME
4 libproc - process control library
5
6 SYNOPSIS
7 Process Control Library (libproc, -lproc)
8 #include <libproc.h>
9
10 DESCRIPTION
11 The libproc library provides consumers a general series of interfaces to
12 inspect and control both live processes and core files. It is intended
13 for introspection tools such as debuggers by providing a high-level
14 interface to the /proc file system (proc(4)).
15
16 The libproc library provides interfaces that focus on:
17
18 o Creating and attaching to live process, core files, and
19 arbitrary ELF objects.
20
21 o Interrogating the state of a process or core file.
22
23 o Manipulating the current state of a process or thread.
24
25 o Interrogating the state of threads of a process or core file.
26
27 o Running system calls in the context of another process.
28
29 o Various utilities for iterating process and core file file
30 descriptors, mappings, symbols, and more.
31
32 o Various utilities to support debugging tools.
33
34 Live Processes
35 The libproc library can be used to manipulate running processes and to
36 create new ones. To manipulate an existing process first grab it with
37 the Pgrab() function. A process is generally stopped as a side effect of
38 grabbing it. Callers must exercise caution, as if they do not use the
39 library correctly, or they terminate unexpectedly, a process may remain
40 stopped.
41
42 Unprivileged users may only grab their own processes. Users with the
43 privilege {PRIV_PROC_OWNER} may manipulate processes that they do not
44 own; however, additional restrictions as described in privileges(5)
45 apply.
46
47 In addition, the Pcreate() and Pxcreate() functions may be used to create
48 processes which are always controlled by the library.
49
50 Core Files
51 The libproc library has the ability to open and interpret core files
52 produced by processes on the system. Process core dump generation is
53 controlled by the coreadm(1M) command. In addition, the library has the
54 ability to understand and interpret core dumps generated by Linux kernel
55 and can provide a subset of its functionality on such core files,
56 provided the original binary is also present.
57
58 Not all functions in the libproc library are valid for core files. In
59 general, none of the commands which manipulate the current state of a
60 process or thread or that try to force system calls on a victim process
61 will work. Furthermore several of the information and iteration
62 interfaces are limited based on the data that is available in the core
63 file. For example, if the core file is of a process that omits the frame
64 pointer, the ability to iterate the stack will be limited.
65
66 Use the Pgrab_core() or Pfgrab_core() function to open a core file. Use
67 the Pgrab_file() function to open an ELF object file. This is useful for
68 obtaining information stored in ELF headers and sections.
69
70 Debug Information
71 Many of the operations in the library rely on debug information being
72 present in a process and its associated libraries. The library leverages
73 symbol table information, CTF data (ctf(4)) sections, and frame unwinding
74 information based on the use of an ABI defined frame pointer, e.g. %ebp
75 and %rbp on x86 systems.
76
77 Some software providers strip programs of this information or build their
78 executables such that the information will not be present in a core dump.
79 To deal with this fact, the library is able to consume information that
80 is not present in the core file or the running process. It can both
81 consume it from the underlying executable and it also supports finding it
82 from related ELF objects that are linked to it via the .gnu_debuglink and
83 the .note.gnu.build-id ELF sections.
84
85 Iteration Interfaces
86 The libproc library provides the ability to iterate over the following
87 aspects of a process or core file:
88
89 o Active threads
90
91 o Active and zombie threads
92
93 o All non-system processes
94
95 o All process mappings
96
97 o All objects in a process
98
99 o The environment
100
101 o The symbol table
102
103 o Stack frames
104
105 o File Descriptors
106
107 System Call Injection
108 The libproc library allows the caller to force system calls to be
109 executed in the context of the running process. This can be used both as
110 a tool for introspection, allowing one to get information outside its
111 current context as well as performing modifications to a process.
112
113 These functions run in the context of the calling process. This is often
114 an easier way of getting non-exported information about a process from
115 the system. For example, the pfiles(1) command uses this interface to
116 get more detailed information about a process's open file descriptors,
117 which it would not have access to otherwise.
118
119 INTERFACES
120 The shared object libproc.so.1 provides the public interfaces defined
121 below. See Intro(3) for additional information on shared object
122 interfaces. Functions are organized into categories that describe their
123 purpose. Individual functions are documented in their own manual pages.
124
125 Creation, Grabbing, and Releasing
126 The following routines are related to creating library handles, grabbing
127 cores, processes, and threads, and releasing those resources.
128
129 Lfree Lgrab
130 Lgrab_error Pcreate
131 Pcreate_agent Pcreate_callback
132 Pcreate_error Pdestroy_agent
133 Pfgrab_core Pfree
134 Pgrab Pgrab_core
135 Pgrab_error Pgrab_file
136 Pgrab_ops Prelease
137 Preopen Pxcreate
138
139 Process interrogation and manipulation
140 The following routines obtain information about a process and allow
141 manipulation of the process itself.
142
143 Paddr_to_ctf Paddr_to_loadobj
144 Paddr_to_map Paddr_to_text_map
145 Pasfd Pclearfault
146 Pclearsig Pcontent
147 Pcred Pctlfd
148 Pdelbkpt Pdelwapt
149 Pdstop Pexecname
150 Pfault Pfgcore
151 Pgcore Pgetareg
152 Pgetauxval Pgetauxvec
153 Pgetenv Pisprocdir
154 Pissyscall_prev Plmid
155 Plmid_to_loadobj Plmid_to_map
156 Plookup_by_addr Plookup_by_name
157 Plwp_alt_stack Plwp_getfpregs
158 Plwp_getname Plwp_getpsinfo
159 Plwp_getregs Plwp_getspymaster
160 Plwp_main_stack Plwp_setfpregs
161 Plwp_setregs Plwp_stack
162 Pname_to_ctf Pname_to_loadobj
163 Pname_to_map Pobjname
164 Pobjname_resolved Pplatform
165 Ppltdest Ppriv
166 Ppsinfo Pputareg
167 Prd_agent Pread
168 Pread_string Preset_maps
169 Psetbkpt Psecflags
170 Psetcred Psetfault
171 Psetflags Psetpriv
172 Psetrun Psetsignal
173 Psetsysentry Psetsysexit
174 Psetwapt Psetzoneid
175 Psignal Pstate
176 Pstatus Pstop
177 Pstopstatus Psync
178 Psysentry Psysexit
179 Puname Punsetflags
180 Pupdate_maps Pupdate_syms
181 Pwait Pwrite
182 Pxecbkpt Pxecwapt
183 Pxlookup_by_addr Pxlookup_by_addr_resolved
184 Pxlookup_by_name Pzonename
185 Pzonepath Pzoneroot
186
187 Thread interrogation and manipulation
188 The following routines obtain information about a thread and allow
189 manipulation of the thread itself.
190
191 Lalt_stack Lclearfault
192 Lclearsig Lctlfd
193 Ldstop Lgetareg
194 Lmain_stack Lprochandle
195 Lpsinfo Lputareg
196 Lsetrun Lstack
197 Lstate Lstatus
198 Lstop Lsync
199 Lwait Lxecbkpt
200 Lxecwapt
201
202 System Call Injection
203 The following routines are used to inject specific system calls and have
204 them run in the context of a process.
205
206 pr_access pr_close
207 pr_creat pr_door_info
208 pr_exit pr_fcntl
209 pr_fstat pr_fstat64
210 pr_fstatvfs pr_getitimer
211 pr_getpeername pr_getpeerucred
212 pr_getprojid pr_getrctl
213 pr_getrlimit pr_getrlimit64
214 pr_getsockname pr_getsockopt
215 pr_gettaskid pr_getzoneid
216 pr_ioctl pr_link
217 pr_llseek pr_lseek
218 pr_lstat pr_lstat64
219 pr_memcntl pr_meminfo
220 pr_mmap pr_munmap
221 pr_open pr_processor_bind
222 pr_rename pr_setitimer
223 pr_setrctl pr_setrlimit
224 pr_setrlimit64 pr_settaskid
225 pr_sigaction pr_stat
226 pr_stat64 pr_statvfs
227 pr_unlink pr_waitid
228
229 Iteration routines
230 These routines are used to iterate over the contents of a process.
231
232 Penv_iter Plwp_iter
233 Plwp_iter_all Pmapping_iter
234 Pmapping_iter_resolved Pobject_iter
235 Pobject_iter_resolved Pstack_iter
236 Psymbol_iter Psymbol_iter_by_addr
237 Psymbol_iter_by_lmid Psymbol_iter_by_name
238 Pxsymbol_iter Pfdinfo_iter
239
240 Utility routines
241 The following routines are utilities that are useful to consumers of the
242 library.
243
244 Perror_printf proc_arg_grab
245 proc_arg_psinfo proc_arg_xgrab
246 proc_arg_xpsinfo proc_content2str
247 proc_finistdio proc_fltname
248 proc_fltset2str proc_flushstdio
249 proc_get_auxv proc_get_cred
250 proc_get_priv proc_get_psinfo
251 proc_get_status proc_initstdio
252 proc_lwp_in_set proc_lwp_range_valid
253 proc_signame proc_sigset2str
254 proc_str2content proc_str2flt
255 proc_str2fltset proc_str2sig
256 proc_str2sigset proc_str2sys
257 proc_str2sysset proc_sysname
258 proc_sysset2str proc_unctrl_psinfo
259 proc_walk
260
261 x86 Specific Routines
262 The following routines are specific to the x86, 32-bit and 64-bit,
263 versions of the libproc library.
264
265 Pldt proc_get_ldt
266
267 SPARC specific Routines
268 The following functions are specific to the SPARC, 32-bit and 64-bit,
269 versions of the libproc library.
270
271 Plwp_getgwindows Plwp_getxregs
272 Plwp_setxregs
273
274 The following functions are specific to the 64-bit SPARC version of the
275 libproc library.
276
277 Plwp_getasrs Plwp_setasrs
278
279 PROCESS STATES
280 Every process handle that exists in libproc has a state. In some cases,
281 such as for core files, these states are static. In other cases, such as
282 handles that correspond to a running process or a created process, these
283 states are dynamic and change based on actions taken in the library. The
284 state can be obtained with the Pstate(3PROC) function.
285
286 The various states are:
287
288 PS_RUN An actively running process. This may be a process
289 that was obtained by creating it with functions such
290 as Pcreate(3PROC) or by grabbing an existing process
291 such as Pgrab(3PROC).
292
293 PS_STOP An active process that is no longer executing. A
294 process may stop for many reasons such as an explicit
295 stop request (through pstop(1) for example) or if a
296 tracing event is hit.
297
298 The reason a process is stopped may be obtained
299 through the thread's lwpstatus_t structure read
300 directly from /proc or obtained through the
301 Lstatus(3PROC) function.
302
303 PS_LOST Control over the process has been lost. This may
304 happen when the process executes a new image
305 requiring a different set of privileges. To resume
306 control call Preopen(3PROC). For more information on
307 losing control of a process, see proc(4).
308
309 PS_UNDEAD A zombie process. It has terminated, but it has not
310 been cleaned up yet by its parent. For more on the
311 conditions of becoming a zombie, see exec(2).
312
313 PS_DEAD Processes in this state are always core files. See
314 the earlier section Core Files for more information
315 on working with core files.
316
317 PS_IDLE A process that has never been run. This is always
318 the case for handles that refer to files as the files
319 cannot be executed. Those process handles are
320 obtained through calling Pgrab_file(3PROC).
321
322 Many functions relating to tracing processes, for example Psignal(3PROC),
323 Psetsignal(3PROC), Psetfault(3PROC), Psysentry(3PROC), and others,
324 mention that they only act upon Active Processes. This specifically
325 refers to processes whose state are in PS_RUN and PS_STOP. Process
326 handles in the other states have no notion of settable tracing flags,
327 though core files (type PS_DEAD) may have a read-only snapshot of their
328 tracing settings available.
329
330 TYPES
331 The libproc library uses many types that come from the /proc file system
332 (proc(4)) and the ELF format (elf(3ELF)). However, it also defines the
333 following types:
334
335 struct ps_prochandle
336
337 The struct ps_prochandle is an opaque handle to the library and the core
338 element of control for a process. Consumers obtain pointers to a handle
339 through the use of the Pcreate(), Pgrab(), and related functions. When a
340 caller is done with a handle, then it should call one of the Pfree() and
341 Prelease() functions to relinquish the handle, release associated
342 resources, and potentially set the process to run again.
343
344 struct ps_lwphandle
345
346 The struct ps_lwphandle is analogous to the struct ps_prochandle, but it
347 represents the control of an individual thread, rather than a process.
348 Consumers obtain pointers to a handle through the Lgrab() function and
349 relinquish it with the Lfree() function.
350
351 core_content_t
352
353 The core_content_t is a value which describes the various content types
354 of core files. These are used in functions such as Pcontent(3PROC) and
355 Pgcore(3PROC) to describe and control the types of content that get
356 included. Various content types may be included together through a
357 bitwise-inclusive-OR. The default system core contents are controlled
358 with the coreadm(1M) tool. The following table lists the current set of
359 core contents in the system, though the set may increase over time. The
360 string after the macro is the human readable string that corresponds with
361 the constant and is used by coreadm(1M), proc_content2str(3PROC), and
362 proc_str2content(3PROC).
363
364 CC_CONTENT_STACK ("stack")
365 The contents include the process stack. Note, this only
366 covers the main thread's stack. The stack of other threads
367 is covered by CC_CONTENT_ANON.
368
369 CC_CONTENT_HEAP ("heap")
370 The contents include the process heap.
371
372 CC_CONTENT_SHFILE ("shfile")
373 The contents include shared mappings that are backed by
374 files (e.g. mapped through mmap(2) with the MAP_SHARED
375 flag).
376
377 CC_CONTENT_SHANNON ("shannon")
378 The contents include shared mappings that are backed by
379 anonymous memory (e.g. mapped through mmap(2) with the
380 MAP_SHARED and MAP_ANON flags).
381
382 CC_CONTENT_RODATA ("rodata")
383 The contents include private read-only file mappings, such
384 as shared library text.
385
386 CC_CONTENT_ANON ("anon")
387 The contents include private anonymous mappings. This
388 includes the stacks of threads which are not the main
389 thread.
390
391 CC_CONTENT_SHM ("shm")
392 The contents include system V shared memory.
393
394 CC_CONTENT_ISM ("ism")
395 The contents include ISM (intimate shared memory) mappings.
396
397 CC_CONTENT_DISM ("dism")
398 The contents include DISM (dynamic shared memory) mappings.
399
400 CC_CONTENT_CTF ("ctf")
401 The contents include ctf(4) (Compact C Type Format)
402 information. Note, not all objects in the process may have
403 CTF information available.
404
405 CC_CONTENT_SYMTAB ("symtab")
406 The contents include the symbol table. Note, not all
407 objects in the process may have a symbol table available.
408
409 CC_CONTENT_ALL ("all")
410 This value indicates that all of the above content values
411 are present. Note that additional values may be added in
412 the future, in which case the value of the symbol will be
413 updated to include them. Comparisons with CC_CONTENT_ALL
414 should validate all the expected bits are set by an
415 expression such as (c & CC_CONTENT_ALL) == CC_CONTENT_ALL.
416
417 CC_CONTENT_NONE ("none")
418 This value indicates that there is no content present.
419
420 CC_CONTENT_DEFAULT ("default")
421 The content includes the following set of default values:
422 CC_CONTENT_STACK, CC_CONTENT_HEAP, CC_CONTENT_ISM,
423 CC_CONTENT_DISM, CC_CONTENT_SHM, CC_CONTENT_SHANON,
424 CC_CONTENT_TEXT, CC_CONTENT_DATA, CC_CONTENT_RODATA,
425 CC_CONTENT_ANON, CC_CONTENT_CTF, and CC_CONTENT_SYMTAB.
426 Note that the default may change. Comparisons with
427 CC_CONTENT_DEFAULT should validate that all of the expected
428 bits are set with an expression such as
429 (c & CC_CONTENT_DEFAULT) == CC_CONTENT_DEFAULT.
430
431 CC_CONTENT_INVALID
432 This indicates that the contents are invalid.
433
434 prfdinfo_t
435
436 The prfdinfo_t structure is used with the Pfdinfo_iter() function which
437 describes information about a file descriptor. The structure is defined
438 as follows:
439
440 typedef struct prfdinfo {
441 int pr_fd;
442 mode_t pr_mode;
443 uid_t pr_uid;
444 gid_t pr_gid;
445 major_t pr_major; /* think stat.st_dev */
446 minor_t pr_minor;
447 major_t pr_rmajor; /* think stat.st_rdev */
448 minor_t pr_rminor;
449 ino64_t pr_ino;
450 off64_t pr_offset;
451 off64_t pr_size;
452 int pr_fileflags; /* fcntl(F_GETXFL), etc */
453 int pr_fdflags; /* fcntl(F_GETFD), etc. */
454 char pr_path[MAXPATHLEN];
455 } prfdinfo_t;
456
457 The structure has similar information to that found in the stat structure
458 that's used as part of the stat family of system calls, defined in
459 stat(2). The member pr_fd contains the number of the file descriptor of
460 the file. The members pr_mode, pr_uid, pr_gid, pr_ino, and pr_size are
461 the same as the members st_mode, st_uid, st_gid, st_ino, and st_size in
462 the stat structure.
463
464 The pr_major and pr_minor members contain the major and minor numbers of
465 the device containing the directory for this file. This is similar to
466 the st_dev member of the stat structure, except that it is broken out
467 into its major and minor components. The pr_rmajor and pr_rminor members
468 are similar in spirit to pr_major and pr_minor; however, they are
469 equivalent to the st_rdev member of the stat structure and thus have
470 meaning for special character and block files.
471
472 The pr_offset member contains the current seek offset of the file
473 descriptor. The pr_fileflags and pr_fdflags members contain the flags
474 that would have been returned by a call to fcntl(2) with the arguments
475 F_GETXFL and F_GETFD respectively.
476
477 prsyminfo_t
478
479 The prsyminfo_t structure is used with the various symbol look up
480 functions Pxlookup_by_name(), Pxlookup_by_addr(), and
481 Pxlookup_by_addr_resolved() which describes additional information about
482 a symbol. The structure is defined as follows:
483
484 typedef struct prsyminfo {
485 const char *prs_object; /* object name */
486 const char *prs_name; /* symbol name */
487 Lmid_t prs_lmid; /* link map id */
488 uint_t prs_id; /* symbol id */
489 uint_t prs_table; /* symbol table id */
490 } prsyminfo_t;
491
492 The member prs_object points to a string that contains the name of the
493 object file, if known, that the symbol comes from. The member prs_name
494 points to the name of the symbol, if known. This may be unknown due to a
495 stripped binary that contains no symbol table. The member prs_lmid
496 indicates the link map identifier that the symbol was found on. For more
497 information on link map identifiers refer to the Linker and Libraries
498 Guide and dlopen(3C).
499
500 The members prs_id and prs_table can be used to determine both the symbol
501 table that the entry came from and which entry in the table it
502 corresponds to. If the value of prs_table is PR_SYMTAB then it came from
503 the ELF standard symbol table. However, if it is instead PR_DYNSYM, then
504 that indicates that it comes from the process's dynamic section.
505
506 proc_lwp_f
507
508 The proc_lwp_f is a function pointer type that is used with the
509 Plwp_iter() function. It is defined as typedef int proc_lwp_f(void *,
510 const lwpstatus_t *). The first argument is a pointer to an argument
511 that the user specifies, while the second has the thread's status
512 information and is defined in proc(4). For additional information on
513 using this type, see Plwp_iter(3PROC).
514
515 proc_lwp_all_f
516
517 The proc_lwp_all_f is a function pointer type that is used with the
518 Plwp_iter_all() function. It is defined as typedef int
519 proc_lwp_all_f(void *, const lwpstatus_t *, const lwpsinfo_t *). The
520 first argument is a pointer to an argument that the user specifies. The
521 second and third arguments contain the thread's status and thread-
522 specific ps(1) information respectively. Both structures are defined in
523 proc(4). For additional information on using this type, see
524 Plwp_iter_all(3PROC).
525
526 proc_walk_f
527
528 The proc_walk_f is a function pointer type that is used with the
529 proc_walk() function. It is defined as typedef int
530 proc_walk_f(psinfo_t *, lwpsinfo_t *, void *). The first argument
531 contains the process ps(1) information and the second argument contains
532 the representative thread's ps(1) information. Both structures are
533 defined in proc(4). The final argument is a pointer to an argument that
534 the user specifies. For more information on using this, see
535 proc_walk(3PROC).
536
537 proc_map_f
538
539 The proc_map_f is a function pointer type that is used with the
540 Pmapping_iter(), Pmapping_iter_resolved(), Pobject_iter(), and
541 Pobject_iter_resolved() functions. It is defined as typedef int
542 proc_map_f(void *, const prmap_t *, const char *). The first argument is
543 a pointer to an argument that the user specifies. The second argument is
544 describes the mapping information and is defined in proc(4). The final
545 argument contains the name of the mapping or object file in question.
546 For additional information on using this type, see Pmapping_iter(3PROC).
547
548 proc_env_f
549
550 The proc_env_f is a function pointer type that is used with the
551 Penv_iter() function. It is defined as typedef int proc_env_f(void *,
552 struct ps_prochandle *, uintptr_t, const char *). The first argument is
553 a pointer to an argument that the user specifies. The second argument is
554 a pointer to the struct ps_prochandle that the callback was passed to.
555 The third argument is the address of the environment variable in the
556 process. The fourth argument is the environment variable. Values in the
557 environment follow the convention of the form variable=value. For more
558 information on environment variables see exec(2) and environ(5). For
559 additional information on using this type, see Penv_iter(3PROC).
560
561 proc_sym_f
562
563 The proc_sym_f is a function pointer type that is used with the
564 Psmbol_iter(), Psymbol_iter_by_addr(), Psymbol_iter_by_name(), and
565 Psymbol_iter_by_lmid() functions. It is defined as typedef int
566 proc_sym_f(void *, const GElf_Sym *, const char *). The first argument
567 is a pointer to an argument that the user supplies. The second argument
568 is a pointer to the ELF symbol information in a 32-bit and 64-bit neutral
569 form. See elf(3ELF) and gelf(3ELF) for more information on it. The
570 final argument points to a character string that has the name of the
571 symbol. For additional information on using this type, see
572 Psymbol_iter(3PROC), Psymbol_iter_by_addr(3PROC),
573 Psymbol_iter_by_name(3PROC), and Psymbol_iter_by_lmid(3PROC).
574
575 proc_xsym_f
576
577 The proc_xsym_f is a function pointer type that is used with the
578 Pxsymbol_iter() function. It is defined as typedef int
579 proc_xsym_f(void *, const GElf_Sym *, const char *, const prsyminfo_t *).
580 The first three arguments are identical to those of proc_sym_f. The
581 final argument contains additional information about the symbol itself.
582 The members of the prsyminfo_t are defined earlier in this section. For
583 additional information on using this type, see Pxsymbol_iter(3PROC).
584
585 proc_stack_f
586
587 The proc_stack_f is a function pointer type that is used with the
588 Pstack_iter() function. It is defined as typedef int
589 proc_stack_f(void *, prgregset_t, uint_t, const long *). The first
590 argument is a pointer to an argument that the user specifies. The second
591 argument's contents are platform specific. The registers that contain
592 stack information, usually the stack pointer and frame pointer, will be
593 filled in to point to an entry. The prgregset_t is defined in proc(4).
594
595 The third argument contains the number of arguments to the current stack
596 frame and the fourth argument contains an array of addresses that
597 correspond to the arguments to that stack function. The value of the
598 third argument dictates the number of entries in the fourth argument.
599 For additional information on using this type, see Pstack_iter(3PROC).
600
601 proc_fdinfo_f
602
603 The proc_fdinfo_f is a function pointer type that is used with the
604 Pfdinfo_iter() function. It is defined as typedef int
605 proc_fdinfo_f(void *, prfdinfo_t *). The first argument is a pointer to
606 an argument that the user specifies. The second argument contains
607 information about an open file descriptor. The members of the prfdinfo_t
608 are defined earlier in this section. For additional information on using
609 this type, see Pfdinfo_iter(3PROC).
610
611 PROGRAMMING NOTES
612 When working with live processes, whether from the Pgrab(3PROC) or
613 Pcreate(3PROC) family of functions, there are some additional
614 considerations. Importantly, if a process calls any of the exec(2) suite
615 of functions, much of the state information that is obtained,
616 particularly that about mappings in the process will be invalid. Callers
617 must ensure that they call Preset_maps(3PROC) when they hold a process
618 handle across an exec. In addition, users of the library should
619 familiarize themselves with the PROGRAMMING NOTES section of the proc(4)
620 manual page, which discusses issues of privileges and security.
621
622 DEBUGGING
623 The library provides a means for obtaining additional debugging
624 information. The output itself is not part of the libproc library's
625 stable interface. Setting the environment variable LIBPROC_DEBUG to some
626 value will print information to standard error. For example,
627 LIBPROC_DEBUG=please.
628
629 LOCKING
630 Most functions operate on a handle to a process in the form of a struct
631 ps_prochandle *. Unless otherwise indicated, the library does not
632 provide any synchronization for different routines that are operating on
633 the same libproc library handle. It is up to the caller to ensure that
634 only a single thread is using a handle at any given time. Multiple
635 threads may call libproc library routines at the same time as long as
636 each thread is using a different handle.
637
638 Each individual function notes its MT-Level section. The MT-Level of a
639 routine that matches the above description will refer to this manual
640 page. If it does not, then it refers to the standard attributes in
641 attributes(5).
642
643 INTERFACE STABILITY
644 Uncommitted
645
646 While the library is considered an uncommitted interface, and is still
647 evolving, changes that break compatibility have been uncommon and this
648 trend is expected to continue. It is documented to allow consumers,
649 whether part of illumos or outside of it, to understand the libarary and
650 make use of it with the understanding that changes may occur which break
651 both source and binary compatibility.
652
653 SEE ALSO
654 gcore(1), mdb(1), proc(1), ps(1), coreadm(1M), exec(2), fcntl(2),
655 stat(2), Intro(3), dlopen(3C), elf(3ELF), ctf(4), proc(4), attributes(5),
656 environ(5), privileges(5)
657
658
659 Linkers and Libraries Guide.
660
661 Lfree(3PROC), Lgrab(3PROC), Lgrab_error(3PROC), Pcreate(3PROC),
662 Pcreate_agent(3PROC), Pcreate_callback(3PROC), Pcreate_error(3PROC),
663 Pdestroy_agent(3PROC), Pfgrab_core(3PROC), Pfree(3PROC), Pgrab(3PROC),
664 Pgrab_core(3PROC), Pgrab_error(3PROC), Pgrab_file(3PROC),
665 Pgrab_ops(3PROC), Prelease(3PROC), Preopen(3PROC), Pxcreate(3PROC)
666
667 Paddr_to_ctf(3PROC), Paddr_to_loadobj(3PROC), Paddr_to_map(3PROC),
668 Paddr_to_text_map(3PROC), Pasfd(3PROC), Pclearfault(3PROC),
669 Pclearsig(3PROC), Pcontent(3PROC), Pcred(3PROC), Pctlfd(3PROC),
670 Pdelbkpt(3PROC), Pdelwapt(3PROC), Pdstop(3PROC), Pexecname(3PROC),
671 Pfault(3PROC), Pfgcore(3PROC), Pgcore(3PROC), Pgetareg(3PROC),
672 Pgetauxval(3PROC), Pgetauxvec(3PROC), Pgetenv(3PROC), Pisprocdir(3PROC),
673 Pissyscall_prev(3PROC), Plmid(3PROC), Plmid_to_loadobj(3PROC),
674 Plmid_to_map(3PROC), Plookup_by_addr(3PROC), Plookup_by_name(3PROC),
675 Plwp_alt_stack(3PROC), Plwp_getfpregs(3PROC), Plwp_getpsinfo(3PROC),
676 Plwp_getregs(3PROC), Plwp_getspymaster(3PROC), Plwp_main_stack(3PROC),
677 Plwp_setfpregs(3PROC), Plwp_setregs(3PROC), Plwp_stack(3PROC),
678 Pname_to_ctf(3PROC), Pname_to_loadobj(3PROC), Pname_to_map(3PROC),
679 Pobjname(3PROC), Pobjname_resolved(3PROC), Pplatform(3PROC),
680 Ppltdest(3PROC), Ppriv(3PROC), Ppsinfo(3PROC), Pputareg(3PROC),
681 Prd_agent(3PROC), Pread(3PROC), Pread_string(3PROC), Preset_maps(3PROC),
682 Psecflags(3PROC), Psetbkpt(3PROC), Psetcred(3PROC), Psetfault(3PROC),
683 Psetflags(3PROC), Psetpriv(3PROC), Psetrun(3PROC), Psetsignal(3PROC),
684 Psetsysentry(3PROC), Psetsysexit(3PROC), Psetwapt(3PROC),
685 Psetzoneid(3PROC), Psignal(3PROC), Pstate(3PROC), Pstatus(3PROC),
686 Pstop(3PROC), Pstopstatus(3PROC), Psync(3PROC), Psysentry(3PROC),
687 Psysexit(3PROC), Puname(3PROC), Punsetflags(3PROC), Pupdate_maps(3PROC),
688 Pupdate_syms(3PROC), Pwait(3PROC), Pwrite(3PROC), Pxecbkpt(3PROC),
689 Pxecwapt(3PROC), Pxlookup_by_addr(3PROC),
690 Pxlookup_by_addr_resolved(3PROC), Pxlookup_by_name(3PROC),
691 Pzonename(3PROC), Pzonepath(3PROC), Pzoneroot(3PROC)
692
693 Lalt_stack(3PROC), Lclearfault(3PROC), Lclearsig(3PROC), Lctlfd(3PROC),
694 Ldstop(3PROC), Lgetareg(3PROC), Lmain_stack(3PROC), Lprochandle(3PROC),
695 Lpsinfo(3PROC), Lputareg(3PROC), Lsetrun(3PROC), Lstack(3PROC),
696 Lstate(3PROC), Lstatus(3PROC), Lstop(3PROC), Lsync(3PROC), Lwait(3PROC),
697 Lxecbkpt(3PROC), Lxecwapt(3PROC)
698
699 pr_access(3PROC), pr_close(3PROC), pr_creat(3PROC), pr_door_info(3PROC),
700 pr_exit(3PROC), pr_fcntl(3PROC), pr_fstat(3PROC), pr_fstat64(3PROC),
701 pr_fstatvfs(3PROC), pr_getitimer(3PROC), pr_getpeername(3PROC),
702 pr_getpeerucred(3PROC), pr_getprojid(3PROC), pr_getrctl(3PROC),
703 pr_getrlimit(3PROC), pr_getrlimit64(3PROC), pr_getsockname(3PROC),
704 pr_getsockopt(3PROC), pr_gettaskid(3PROC), pr_getzoneid(3PROC),
705 pr_ioctl(3PROC), pr_link(3PROC), pr_llseek(3PROC), pr_lseek(3PROC),
706 pr_lstat(3PROC), pr_lstat64(3PROC), pr_memcntl(3PROC), pr_meminfo(3PROC),
707 pr_mmap(3PROC), pr_munmap(3PROC), pr_open(3PROC),
708 pr_processor_bind(3PROC), pr_rename(3PROC), pr_setitimer(3PROC),
709 pr_setrctl(3PROC), pr_setrlimit(3PROC), pr_setrlimit64(3PROC),
710 pr_settaskid(3PROC), pr_sigaction(3PROC), pr_stat(3PROC),
711 pr_stat64(3PROC), pr_statvfs(3PROC), pr_unlink(3PROC), pr_waitid(3PROC),
712
713 Penv_iter(3PROC), Plwp_iter(3PROC), Plwp_iter_all(3PROC),
714 Pmapping_iter(3PROC), Pmapping_iter_resolved(3PROC), Pobject_iter(3PROC),
715 Pobject_iter_resolved(3PROC), Pstack_iter(3PROC), Psymbol_iter(3PROC),
716 Psymbol_iter_by_addr(3PROC), Psymbol_iter_by_lmid(3PROC),
717 Psymbol_iter_by_name(3PROC), Pxsymbol_iter(3PROC), Pfdinfo_iter(3PROC)
718
719 Perror_printf(3PROC), proc_arg_grab(3PROC), proc_arg_psinfo(3PROC),
720 proc_arg_xgrab(3PROC), proc_arg_xpsinfo(3PROC), proc_content2str(3PROC),
721 proc_finistdio(3PROC), proc_fltname(3PROC), proc_fltset2str(3PROC),
722 proc_flushstdio(3PROC), proc_get_auxv(3PROC), proc_get_cred(3PROC),
723 proc_get_priv(3PROC), proc_get_psinfo(3PROC), proc_get_status(3PROC),
724 proc_initstdio(3PROC), proc_lwp_in_set(3PROC),
725 proc_lwp_range_valid(3PROC), proc_signame(3PROC), proc_sigset2str(3PROC),
726 proc_str2content(3PROC), proc_str2flt(3PROC), proc_str2fltset(3PROC),
727 proc_str2sig(3PROC), proc_str2sigset(3PROC), proc_str2sys(3PROC),
728 proc_str2sysset(3PROC), proc_sysname(3PROC), proc_sysset2str(3PROC),
729 proc_unctrl_psinfo(3PROC), proc_walk(3PROC)
730
731 Pldt(3PROC), proc_get_ldt(3PROC),
732
733 Plwp_getgwindows(3PROC), Plwp_getxregs(3PROC), Plwp_setxregs(3PROC),
734
735 Plwp_getasrs(3PROC), Plwp_setasrs(3PROC)
736
737 illumos September 15, 2018 illumos
--- EOF ---