=== Process Descriptor API completion

Contact: Konstantin Belousov <kib@FreeBSD.org>

FreeBSD offered the Process Descriptors facility for long time.
Its main use is in the Capsicum sandboxes where the handle is required to operate on an object, and process descriptor provided such handle.
Other operating systems provide similar facility under the same name.
The offered API was not complete, main lacking part being the man:pdwait[2] system call, the analog of man:wait[2] family, which operates on the process descriptor instead of the process id.

The described project added man:pdwait[2] call.
Another important addition was the man:pdrfork[2] call, which provides the same fine-grained support for process copy construction as man:rfork[2], but also returns the process descriptor as the handle, like man:pdfork[2].

After pdwait and pdrfork addition, the natural extensions for the man:posix_spawn[3] facilities were possible.
Now the man:posix_spawnattr_setprocdescp_np[3] attribute requests that man:posix_spawn[3] returned process descriptor.
Another natural addition was man:posix_spawnattr_setexecfd_np[3] which specifies the executable image by file descriptor instead of the name.

Together, the newly added features make the process descriptor complete and allow the use of posix_spawn in the sandboxes.

Sponsor: The FreeBSD Foundation
