1 .\"
2 .\" This file and its contents are supplied under the terms of the
3 .\" Common Development and Distribution License ("CDDL"), version 1.0.
4 .\" You may only use this file in accordance with the terms of version
5 .\" 1.0 of the CDDL.
6 .\"
7 .\" A full copy of the text of the CDDL should have accompanied this
8 .\" source. A copy of the CDDL is also available via the Internet at
9 .\" http://www.illumos.org/license/CDDL.
10 .\"
11 .\"
12 .\" Copyright 2015 Joyent, Inc.
13 .\"
14 .Dd May 11, 2016
15 .Dt PSTOPSTATUS 3PROC
16 .Os
17 .Sh NAME
18 .Nm Pdstop ,
19 .Nm Pstopstatus ,
20 .Nm Pstop ,
21 .Nm Pwait ,
22 .Nm Ldstop ,
23 .Nm Lstop ,
24 .Nm Lwait
25 .Nd process and thread stop operations
26 .Sh LIBRARY
27 .Lb libproc
28 .Sh SYNOPSIS
29 .In libproc.h
30 .Ft int
31 .Fo Pdstop
32 .Fa "struct ps_prochandle *P"
33 .Fc
34 .Ft int
35 .Fo Pstopstatus
36 .Fa "struct ps_prochandle *P"
37 .Fa "long request"
38 .Fa "uint_t msec"
39 .Fc
40 .Ft int
41 .Fo Pstop
42 .Fa "struct ps_prochandle *P"
43 .Fc
44 .Ft int
45 .Fo Pwait
46 .Fa "struct ps_prochandle *P"
47 .Fc
48 .Ft int
49 .Fo Ldstop
50 .Fa "struct ps_lwphandle *L"
51 .Fc
52 .Ft int
53 .Fo Lstop
54 .Fa "struct ps_lwphandle *L"
55 .Fc
56 .Ft int
57 .Fo Lwait
58 .Fa "struct ps_lwphandle *L"
59 .Fc
60 .Sh DESCRIPTION
61 The
62 .Fn Pstopstatus
63 function allows the caller to stop and optionally wait for the process
64 handle referred to by
65 .Fa P
66 to be stopped.
67 Stopping a process causes all of its threads to stop execution.
68 Where in their execution the threads will halt is not defined.
69 Threads may be resumed with
70 .Xr Psetrun 3PROC
71 and
72 .Xr prun 1 .
73 .Pp
74 The
75 .Fa request
76 argument should be one of the following symbols:
77 .Bl -tag -width Dv -offset indent
78 .It Dv PCSTOP
79 Stop the process; wait for completion before returning.
80 .It Dv PCDSTOP
81 Stop the process; do not wait for completion before returning.
82 That is, the stopping of the process is performed asynchronously in
83 relation to the caller.
84 .It Dv PCWSTOP
85 Do not direct the process to stop; simply wait for it to stop.
86 .It Dv PCNULL
87 Do not direct the process to stop; simply refreshes the state of the
88 process.
89 .El
90 .Pp
91 Both the
92 .Dv PCSTOP
93 and
94 .Dv PCWSTOP
95 requests allow an upper bound on the amount of time to wait for the
96 process to stop.
97 The
98 .Fa msec
99 argument indicates the number of milliseconds to wait for the stop to
100 complete.
101 If the value of
102 .Fa msec
103 is
104 .Sy 0 ,
105 then it will wait forever.
106 Callers should pass
107 .Sy 0
108 for
109 .Fa msec
110 when the request is
111 .Dv PCDSTOP
112 or
113 .Dv PCNULL .
114 .Pp
115 When a non-zero timeout is specified, the process may or may not be
116 stopped upon return.
117 The return value does not reflect the current state of the process.
118 For example, if the timeout expires during a
119 .Fa PCWSTOP
120 request, the return value will be
121 .Sy 0
122 regardless of the actual state of the process.
123 .Pp
124 Only active processes may be stopped.
125 Handles that refer to core files, zombie processes, or files cannot be used;
126 unless the value of
127 .Fa request
128 is set to
129 .Dv PCNULL .
130 .Pp
131 The
132 .Fn Pstop
133 function is is equivalent to calling the
134 .Fn Pstopstatus
135 function with the request set to
136 .Dv PCSTOP
137 and an infinite timeout.
138 .Pp
139 The
140 .Fn Pwait
141 function is is equivalent to calling the
142 .Fn Pstopstatus
143 function with the request set to
144 .Dv PCWSTOP
145 and an infinite timeout.
146 .Pp
147 The
148 .Fn Pdstop
149 function is is equivalent to calling the
150 .Fn Pstopstatus
151 function with the request set to
152 .Dv PCDSTOP .
153 .Pp
154 The
155 .Fn Ldstop ,
156 .Fn Lstop ,
157 and
158 .Fn Lwait
159 functions are equivalent to the
160 .Fn Pdstop ,
161 .Fn Pstop ,
162 and
163 .Fn Pwait
164 functions, respectively.
165 Except, rather than operating on a process, they operate on the thread handle
166 .Fa L .
167 A call to
168 .Fn Lstop
169 stops only a single thread; whereas
170 .Fn Pstop
171 stops every thread in the process.
172 .Sh RETURN VALUES
173 Upon successful completion, the
174 .Fn Pdstop ,
175 .Fn Pstopstatus ,
176 .Fn Pstop ,
177 .Fn Pwait ,
178 .Fn Ldstop ,
179 .Fn Lstop ,
180 and
181 .Fn Lwait
182 functions return
183 .Sy 0 .
184 Otherwise,
185 .Sy -1
186 is returned and
187 .Dv errno
188 is set to indicate the error that occurred.
189 .Sh ERRORS
190 For a full list of possible errors see the
191 .Sy DIAGNOSTICS
192 section in
193 .Xr proc 4 .
194 .Pp
195 The
196 .Fn Pdstop ,
197 .Fn Pstopstatus ,
198 .Fn Pstop ,
199 .Fn Pwait ,
200 .Fn Ldstop ,
201 .Fn Lstop ,
202 and
203 .Fn Lwait
204 functions will fail if:
205 .Bl -tag -width Er
206 .It Er EAGAIN
207 Control over the handle
208 .Fa P
209 was lost.
210 Callers should call
211 .Xr Preopen 3PROC .
212 For more information on losing control, see
213 .Sy PROGRAMMING NOTES
214 in
215 .Xr proc 4 .
216 .It Er ENOENT
217 The request was not
218 .Dv PCNULL
219 and the process handle
220 .Fa P
221 does not refer to an active process, but refers to a core file, a zombie
222 process, or a file.
223 .It Er EINVAL
224 .Fa request
225 is not valid or the process is in an unknown state.
226 .It Er EPROTO
227 A fatal protocol error occurred and the process could not be stopped.
228 .El
229 .Sh INTERFACE STABILITY
230 .Sy Uncommitted
231 .Sh MT-LEVEL
232 See
233 .Sy LOCKING
234 in
235 .Xr libproc 3LIB .
236 .Sh SEE ALSO
237 .Xr libproc 3LIB ,
238 .Xr Lgrab 3PROC ,
239 .Xr Pcreate 3PROC ,
240 .Xr Pgrab 3PROC ,
241 .Xr Pgrab_core 3PROC ,
242 .Xr Pgrab_file 3PROC ,
243 .Xr proc 4