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