Boost logo

Boost :

Subject: [boost] [process] Formal Review starts today, 27 October
From: Remi Chateauneu (remi.chateauneu_at_[hidden])
Date: 2016-10-31 18:01:15

Hi All,

"Whether you believe the library should be accepted into Boost"

It could be, but as some very important features are missinge, the
implementation should be prepared from now on.

"Your knowledge of the problem domain"
About 20 yrs C++ development Linux and Windows.

This library has a strong focus on the streaming which is quite rare and
interesting. However, other very important features of multi-processing
are missing should be planned: At least to ensure that, in the future, they
can be added without breaking existing code. Example of these desired
fatures are (Taken from my own needs)

* List of subprocesses of a given process.
* Get its parent pid (Already discussed).
* Get the entire process tree of a machine.
* It is very useful to be notified when a given process dies (unotify on
* On windows, we have the feature e.startup_info.dwFlags =
STARTF_RUNFULLSCREEN, which gives some control on the console, which Is
very good. Could we have more documentation about it, and plans to have the
same feature on Linux ? Generally speaking have some control on the process
terminal if there is one.
* Have some knowledge about users and user groups, as strings and integer
identifiers: the concept is similar on Windows and Unix.
* Have some control on process priority( Unix's nice command )

Indeed, many of these features are not portable, but most of time,
developers use only a common core of features, which is quite enough. Maybe
take inspiration from portable libraries such as Python psutil, which
exposes a common interface for all operating systems.


* It might be worth checking portability with other operating systems. BSD
? VMS ???
* Must ensure that this lib is interoperable with boost::interprocess
(Concept of permissions might be worth using ?)
* Does it build on pre-C++11 compilers ? Many projects are not able to
upgrade to C++11 immediately and have to stick to previous C++ standard.

Some critics (Nothing is perfect):

* The merit of the ">" operator for optional arguments is to be visually
similar to an indirection, but in the context of C++ programming, although
elegant, it is I think confusing and could be mismatched with <> templates
or comparisons. Creating a process is a not-so-frequent operation and we
should not be afraid to be verbose and very clear, I believe.
* Syntax ‘(bp::std_out & bp::std_err) > "output.txt"’ . Can we explain the
exact difference with the syntax: ‘bp::std_out > "output.txt", bp::std_err
> "output.txt"’’
* More comments in the code and examples please.
* Examples async_io.cpp or arg.cpp do not build with boost 1.62:
include\boost\process\detail\windows\compare_handles.hpp(24): error C2039:
'BY_HANDLE_FILE_INFORMATION_': is not a member of 'boost::detail::winapi'
* ‘typedef basic_environment<wchar_t> wenvironment;’ : Is It really useful
?? POSIX getenv() only uses char.
* Why is the class basic_environment so big, as it is basically a simple
std::map< std::string, std::string > ? (Naïve question).

Anyway, many congratulations for this very interesting work, which is
definitely on the right direction.


Boost list run by bdawes at, gregod at, cpdaniel at, john at