Opened 5 years ago
Last modified 5 years ago
#13358 new Bugs
boost::process on_exit fails when using multiple processes
Reported by: | Owned by: | ||
---|---|---|---|
Milestone: | To Be Determined | Component: | process |
Version: | Boost 1.65.0 | Severity: | Problem |
Keywords: | Cc: |
Description
int main() { boost::asio::io_service ios; boost::asio::io_service::work working(ios); proc::child c1("/bin/sleep 1", ios, proc::on_exit=[](int exit, const std::error_code& ec_in){std::cout<<"11111"<<std::endl;}); proc::child c2("/bin/sleep 4", ios, proc::on_exit=[](int exit, const std::error_code& ec_in){std::cout<<"44444"<<std::endl;}); proc::child c3("/bin/sleep 2", ios, proc::on_exit=[](int exit, const std::error_code& ec_in){std::cout<<"22222"<<std::endl;}); ios.run(); return 0; }
prints
22222 44444 11111
while it should prints 11111, 22222 and then 44444. However, 22222 is printed after 1 second, 44444 after 2s, and 11111 after 4s.
The same error happen if you use:
boost::process::async_system(ios, [](boost::system::error_code, int){std::cout << "11111" << std::endl;}, "/bin/sleep 1");
This was observed on an up-to-date Archlinux (as of 2017-12-22) with gcc 7.2.1 and clang 5.0.0.
Note:
See TracTickets
for help on using tickets.
I just noticed that this issue has already been reported on another issue tracker : https://github.com/klemens-morgenstern/boost-process/issues/109 .