Boost C++ Libraries Home Libraries People FAQ More


Project position

History of changes
Pending work

History of changes

Version 0.3 (September 22nd, 2008)

  • Dropped the macros BOOST_PROCESS_POSIX_API and BOOST_PROCESS_WIN32_API as Boost.System defines the macros BOOST_POSIX_API and BOOST_WINDOWS_API already.

  • Dropped exception class boost::process::not_found_error which was only thrown by find_executable_in_path and replaced it with filesystem_error.

  • Updated and extended the documentation (e.g. added documentation to functions which were not yet documented).

  • Fixed various bugs including problems with code calling Unicode- or ANSI-versions of Windows API functions.

  • On Windows named pipes are used if the macro BOOST_PROCESS_WINDOWS_USE_NAMED_PIPE is defined. As only named pipes support asynchronous I/O on Windows this macro must be defined if Boost.Process should be used together with Asio.

Version 0.2 (incomplete and only in the sandbox)

  • Relicensed the code under the Boost Software License 1.0 only. The first version was available under both this license and the MIT one only to comply with Summer of Code guidelines.

  • The POSIX-specific bits of a child's exit status were split from the status class into a new posix_status class.

  • The status and children constructors were made private to prevent accidental construction by the user.

  • Fixed duplicate symbols when linking multiple compilation units that use the library.

  • Fixed build with Visual C++ compilers older than 8.0 that do not provide strcpy_s and similar safe functions.

  • Removed the command_line class. The user now specifies the executable path and its arguments separately, using any classes he wants (such as a standard string and a STL container). This removes some black-box magic.

  • Decoupled the launcher classes into context classes and free launch functions. For example, the configuration bits of the old launcher class are now part of context while its start method is now implemented as the launch free function. The same goes for the POSIX and Windows launchers. This was done to cleanly separate the action of launching a process from the parameters describing its properties. As a side effect, a lot of useless getters and setters are gone.

  • The environment class was refactored (much simplified) and made public because it is now exposed to the user through the new context.

  • The file forward_decls.hpp was removed. It is not clear it was any useful, and it could be flawed in concept. Will add later on again if there really is a need for it.

  • The stream_behavior enumeration was converted to a class so that it can carry more information than a simple type. This is useful to be able to implement more complex stream behaviors. As a side effect, stream merging by the use of booleans or standalone data sets is now superseded by the new redirect_to_stdout and posix_redirect behaviors.

  • The basic_work_directory_context and environment_context base classes were added. These are mainly provided to simplify the code in the final Context implementations but may also come handy to the end user in case he is working on his own Context implementation.

  • The status and posix_status classes were greatly simplified. Instead of providing lots of accessor functions they now just expose some constant members. This avoids the need for several preconditions and consistency checks because the interface makes incoherent situations impossible.

  • The pipeline and children classes were removed. The former was replaced by the launch_pipeline convenience function and the pipeline_entry class. The latter was superseded by a simple typedef and a generic wait_children function that can be applied to any kind of collection of Child objects.

  • Made the processes be identified by a system-wide integer instead of a process-specific handle under Windows.

  • Added the process class, an abstraction on top of child that is able to represent any running process within the system. This was a requisite to introduce the self class.

  • Added the self class, whose instances allow access to the current process.

  • Added a way to force the termination of processes.

Version 0.1 (August 21st, 2006)

Initial public release. This is what was presented at the end of the program under which Boost.Process was developed: Google Summer of Code 2006.

Pending work

This section contains a list of pending items in the library that should be addressed before it can be sent for a serious/formal review. Some of these are a simple matter of programming but others will require more consideration to decide the best way to solve them.

  • Improve integration with Asio for example to permit asynchronous notification of child process termination.

  • Make it possible to specify a timeout when waiting for child processes to terminate.

  • Make status' constructor private.

  • Add an interface to self to modify the current environment.

  • Abstract child's streams so that self can also provide a way to access the current process' standard streams.

  • Add a way (a win32_self class?) that allows the retrieval of a Windows HANDLE for the current process.

  • The process class might conflict with the process namespace. I like the names as they are, but maybe one of the two should be renamed or simply put a warning in the documentation explaining where the conflicts may arise. These happen in some compilers when giving both using namespace boost::process and using namespace boost.


  • Explain why the launcher class was discared in favour of the context.

  • Add some diagrams to illustrate pipelines.

  • Add some diagrams to illustrate interprocess communication.