Tweaks to the wait(2) manpage
Konstantin Belousov
kostikbel at gmail.com
Sat Sep 14 08:11:50 UTC 2013
On Thu, Sep 12, 2013 at 04:43:46PM -0400, John Baldwin wrote:
> I have some tweaks to the wait(2) manpage, in particular to the sections on
> wait6() and idtypes. I did also change two other places to use uppercase for
> ID since that seems to be what we do in other pages. The alternate rendered
> text is below followed by the diff. One structural change I chose to make was
> using a tagged list for the non-standard idtypes. Our manpages in general
> prefer tagged lists to bullet lists for enumerations. I left the list of
> standard types as-is as it includes a fourth bullet point that would not have
> an associated tag (though one could perhaps move that into the paragraph
> introducing the list of standard types if a tagged list was desired). I kept
> reading this page as I was writing this e-mail and changed more bits to
> attempt to be more consisent with existing paragraphs, etc.:
>
> The broadest interface of all functions in this family is wait6() which
> is otherwise very much like wait4() but with a few very important dis-
> tinctions. To wait for exited processes the option flag WEXITED must be
I did not liked the introductory sentence above, but was not able to
formulate the idea better. Specifically, I do not like the narrative tone,
and think that 'broadest' and 'distinction' should be expressed better.
> explicitly specified. This allows waiting for processes which have expe-
> rienced other status changes without having to also handle the exit sta-
> tus from terminated processes. Instead of the traditional rusage argu-
> ment, the wrusage arguments points to a structure defined as:
>
> struct __wrusage {
> struct rusage wru_self;
> struct rusage wru_children;
> };
>
> This allows the calling process to collect resource usage statistics from
> both its own child process as well as from its grand children. When no
> resource usage statistics are needed this pointer can be NULL. The last
> argument infop must be either NULL or a pointer to a siginfo_t structure.
> If non-NULL, the structure is filled with the same data as for a SIGCHLD
> signal delivered when the process changed state.
>
> The set of child processes to be queried is specified by the arguments
> idtype and id. The separate idtype and id arguments support many other
> types of identifers in addition to process IDs and process group IDs.
>
> o If idtype is P_PID, waitid() and wait6() wait for the child
> process with a process ID equal to (pid_t)id.
>
> o If idtype is P_PGID, waitid() and wait6() wait for the child
> process with a process group ID equal to (pid_t)id.
>
> o If idtype is P_ALL, waitid() and wait6() wait for any child
> process and the id is ignored.
>
> o If idtype is P_PID or P_PGID and the id is zero, waitid() and
> wait6() wait for any child process in the same process group as
> the caller.
>
> Non-standard identifier types supported by this implementation of
> waitid() and wait6() are:
>
> P_UID Wait for processes whose effective user ID is equal to (uid_t)
> id.
>
> P_GID Wait for processes whose effective group ID is equal to (gid_t)
> id.
>
> P_SID Wait for processes whose session ID is equal to id. If the
> child process started its own session, its session ID will be
> the same as its process ID. Otherwise the session ID of a
> child process will match the caller's session ID.
>
> P_JAILID Waits for processes within a jail whose jail identifier is
> equal to id.
>
> For the wait(), wait3(), and wait4() functions, the single wpid argument
> specifies the set of child processes for which to wait.
>
> o If wpid is -1, the call waits for any child process.
>
> o If wpid is 0, the call waits for any child process in the
> process group of the caller.
>
> o If wpid is greater than zero, the call waits for the process
> with process ID wpid.
>
> o If wpid is less than -1, the call waits for any process whose
> process group ID equals the absolute value of wpid.
>
> ....
>
> If wrusage is non-NULL, separate summaries are returned for the resources
> used by the terminated process and the resources used by all its chil-
> dren.
>
> If infop is non-NULL, a siginfo_t structure is returned with the si_signo
> field set to SIGCHLD and the si_pid field set to the process ID of the
> process reporting status.
>
> When the WNOHANG option is specified and no processes wish to report sta-
> tus, waitid() sets the si_signo and si_pid fields in infop to zero.
> Checking these fields is the only way to know if a status change was
> reported.
>
> When the WNOHANG option is specified and no processes wish to report sta-
> tus, wait4() and wait6() return a process id of 0.
>
> The waitpid() function is identical to wait4() with an rusage value of
> zero. The older wait3() call is the same as wait4() with a wpid value of
s/zero/NULL/ ?
> -1. The wait4() function is identical to wait6() with the flags WEXITED
> and WTRAPPED set in options and infop set to NULL.
>
> ....
>
> The implementation queues one SIGCHLD signal for each child process whose
> status has changed; if wait() returns because the status of a child
> process is available, the pending SIGCHLD signal associated with the
> process ID of the child process will be discarded. Any other pending
> SIGCHLD signals remain pending.
>
> If SIGCHLD is blocked and wait() returns because the status of a child
> process is available, the pending SIGCHLD signal will be cleared unless
> another status of the child process is available.
>
> ....
>
> If waitid() returns because one or more processes have a state change to
> report, 0 is returned. If an error is detected, a value of -1 is
> returned and errno is set to indicate the error. If WNOHANG is specified
> and there are no stopped, continued or exited children, 0 is returned.
> The si_signo and si_pid fields of infop must be checked against zero to
> determine if a process reported status.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-doc/attachments/20130914/52d947e3/attachment.sig>
More information about the freebsd-doc
mailing list