|
|
1.1 root 1: .TH PROC 4
2: .CT 2 proc_man
3: .SH NAME
4: proc \- process file system
5: .SH SYNOPSIS
6: .B #include <sys/types.h>
7: .B #include <sys/proc.h>
8: .br
9: .B #include <sys/pioctl.h>
10: .SH DESCRIPTION
11: .I Proc
12: is a file system that contains memory images of each
13: running process in the system.
14: The name of each entry in the
15: .F /proc
16: directory is the process
17: id of the subject process, expressed in decimal with
18: optional leading zeros.
19: Each process file is owned by the userid of the subject process.
20: The file mode includes read and write permission for
21: the owner if that userid has read
22: access to the associated text file; all other permission bits
23: are zero.
24: The file size is
25: the sum of the sizes of virtual memory segments
26: in the subject process.
27: .PP
28: The subject process is unaffected, except that setuid bits
29: will be ignored if it does an
30: .IR exec (2).
31: (Setuid bits are also ignored if the
32: .IR exec "ing"
33: process has traced signals, or stops on
34: .IR exec ;
35: see the description of
36: .B PIOCSMASK
37: and
38: .B PIOCSEXEC
39: below.)
40: .PP
41: Data may be transferred
42: from or to any locations in the subject's address space through
43: .IR lseek (2),
44: .IR read (2),
45: and
46: .IR write .
47: The
48: .I text segment
49: begins at address 0; the
50: .I data segment
51: starts above the text.
52: The
53: .I user area
54: extends downward below address 0x80000000, and is
55: .B UPAGES*NBPG
56: bytes long (see the header files listed below);
57: the
58: .I stack segment
59: grows downward below the user area.
60: The text, data, and stack sizes
61: may be determined from the process's
62: .L proc
63: structure (see
64: .B PIOCGETPR
65: below).
66: It is an error to access addresses between data and stack.
67: No read or write may span a segment boundary;
68: in the user area only the locations of saved user registers
69: are writable.
70: .PP
71: .IR Ioctl (2)
72: calls control the subject process.
73: The third argument usually points to an integer.
74: The
75: .I ioctl
76: codes are:
77: .TF PIOCSMASK
78: .TP
79: .B PIOCSTOP
80: Send signal
81: .B SIGSTOP
82: to the process, and wait for it to
83: enter the stopped state.
84: .TP
85: .B PIOCWSTOP
86: Wait for the process to stop.
87: .TP
88: .B PIOCRUN
89: Make the process runnable again after a stop.
90: .TP
91: .B PIOCSMASK
92: Define
93: a set of signals to be traced.
94: The process will stop when it receives any signal whose number,
95: as given in
96: .IR signal (2),
97: corresponds to a 1-bit in the given integer,
98: with the least significant bit counted as 1.
99: The traced state and mask bits are inherited by the child of a
100: .IR fork (2).
101: When the process file is closed, the mask becomes zero, but
102: the traced state persists.
103: .TP
104: .B PIOCSEXEC
105: Cause the process to stop after
106: .IR exec (2).
107: This condition is inherited across
108: .IR fork (2)
109: and persists when the process file is closed.
110: .TP
111: .B PIOCREXEC
112: Reverse the effect of
113: .BR PIOCSEXEC .
114: .TP
115: .B PIOCCSIG
116: Clear the subject's currently pending signal (if any).
117: .TP
118: .B PIOCKILL
119: Set the subject's currently pending signal to a given number.
120: .TP
121: .B PIOCOPENT
122: Return a read-only file descriptor
123: for the subject process's text file.
124: (Thus a debugger can find the
125: symbol table without knowing the name of the text file.)
126: .TP
127: .B PIOCNICE
128: Increment the
129: priority of the subject process by a given amount
130: as if by
131: .IR nice (2).
132: .TP
133: .B PIOCGETPR
134: Copy the subject's
135: .B proc
136: structure (see
137: .BR <sys/proc.h> )
138: from the kernel process table into an area pointed to
139: the third argument.
140: (This information, which resides in system space, is not accessible
141: via a normal read.)
142: .PD
143: .PP
144: Any system call is guaranteed to be atomic with respect to the
145: subject process,
146: but nothing prevents more than one
147: process from opening and controlling the same subject.
148: .PP
149: The following header files are useful in analyzing
150: .I proc
151: files:
152: .PP
153: .TF <sys/param.h>
154: .TP
155: .B <signal.h>
156: list of signal numbers
157: .TP
158: .B <sys/param.h>
159: size parameters
160: .TP
161: .B <sys/types.h>
162: special system types
163: .TP
164: .B <sys/user.h>
165: user structure
166: .TP
167: .B <sys/proc.h>
168: proc structure
169: .TP
170: .B <sys/reg.h>
171: locations of saved user registers
172: .TP
173: .B <sys/pioctl.h>
174: ioctl codes for
175: .I proc
176: files
177: .PD
178: .SH FILES
179: .F /proc/*
180: .SH SEE ALSO
181: .IR adb (1),
182: .IR ps (1),
183: .IR hang (1),
184: .IR fmount (2),
185: .IR signal (2),
186: .IR mount (8),
187: .IR pi (9.1)
188: .SH DIAGNOSTICS
189: These errors can occur in addition to the
190: errors normally associated with the file system; see
191: .IR intro (2):
192: .TF ENOENT
193: .TP
194: .B ENOENT
195: The subject process has exited.
196: .TP
197: .B EIO
198: The subject process has attempted I/O at an illegal address.
199: .TP
200: .B EBUSY
201: The subject is in the midst of changing virtual memory
202: attributes, or has pages locked for physical I/O.
203: .TP
204: .B ENOSPC
205: A write has been attempted on a shared text segment and there
206: is no room on the swap space to make a copy.
207: .TP
208: .B EPERM
209: A non-super-user has attempted to better
210: the subject's priority with
211: .BR PIOCNICE .
212: .SH BUGS
213: A process must be swapped in for reading and writing (but not
214: .IR ioctl );
215: this may cause
216: a noticeable delay.
217: .br
218: The spectrum of states which result in
219: .B EBUSY
220: is too conservative.
221: .br
222: A process loaded from a text file with magic number 0407 does not have as
223: a read-only text segment; in this (presumably rare) case
224: .B PIOCOPENT
225: does not work, and the process is accessible even if the
226: text file is read-only.
227: .br
228: The interface involves too many VAX-specific magic numbers.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.