
Julio M. Merino Vidal wrote:
Any comments?
I'd like to add that I think a process library is important and would be quite useful for boost to have. Having dealt with running processes quite a lot, I'd say one of the most important features is providing a method of dealing with "misbehaving" processes. This may not seem obvious at first, but I learned this lesson the hard way several years ago. IMO, to be useful the library must provide a recovery mechanism for the case where a child process locks up and never produces any output or enters an infinite loop and never stops producing output. Here's some of the code I've written for dealing with processes: http://cvs.openwbem.org/cgi-bin/viewcvs.cgi/openwbem/src/common/OW_Exec.hpp?rev=1.27&content-type=text/vnd.viewcvs-markup and http://cvs.openwbem.org/cgi-bin/viewcvs.cgi/openwbem/src/common/OW_Exec.cpp?rev=1.45&content-type=text/vnd.viewcvs-markup Here is an interesting use case: In order to generate some entropy to seed a random number generator, lacking a better source, a lot of child processes are simultaneously executed and their output and timing are added to the entropy pool. All processes are given 10 seconds to run, and are terminated if they haven't exited. This may happen more often than not, since one of the commands being run is tcpdump, and if 100 packets aren't captured in the allotted time it will still be running. See http://cvs.openwbem.org/cgi-bin/viewcvs.cgi/openwbem/src/common/socket/OW_SSLCtxMgr.cpp?rev=1.42&content-type=text/vnd.viewcvs-markup specifically randomSourceCommands, RandomOutputGatherer and their use at the end of loadRandomness(). Given the Exec interface, it's quite simple to accomplish the task. It's also quite easy to integrate the code with iostreams, I've written a trivial streambuffer that uses the UnnamedPipe interface. -- Dan Nuffer