I'm just ramping up on Boost.Process but the sample code I have working might be helpful here.
boost::process:async_system() takes 3 parameters: a boost::asio::io_context object, an exit-handler function, and the command you want to run (just like system(), and it can be either a single line or more than one arg).
After it's invoked, you use the io_context object from the calling thread to manage and monitor the async task - I use the run_one() method which will "Run the io_context object's event processing loop to execute at most one handler" but you can also use other methods to run for a duration etc.
Here's my working code:
#include <boost/process.hpp>
#include <iostream>
using namespace boost;
namespace {
    // declare exit handler function
    void _exitHandler(boost::system::error_code err, int rc) {
        std::cout << "DEBUG async exit error code: " 
                  << err << " rc: " << rc <<std::endl;
    }
}
int main() {
    // create the io_context
    asio::io_context ioctx;
    // call async_system
    process::async_system(ioctx, _exitHandler, "ls /usr/local/bin");
    std::cout << "just called 'ls /usr/local/bin', async" << std::endl;
    int breakout = 0; // safety for weirdness
    do {
        std::cout << " - checking to see if it stopped..." << std::endl;
        if (ioctx.stopped()) {
            std::cout << " * it stopped!" << std::endl;
            break;
        } else {
            std::cout << " + calling io_context.run_one()..." << std::endl;
            ioctx.run_one();
        }
        ++breakout;
    } while (breakout < 1000);
    return 0;
}
The only thing my example lacks is how to use boost::asio::async_result to capture the result - the samples I've see (including here on slashdot) still don't make much sense to me, but hopefully this much is helpful.
Here's the output of the above on my system:
just called 'ls /usr/local/bin', async
 - checking to see if it stopped...
 + calling io_context.run_one()...
 - checking to see if it stopped...
 + calling io_context.run_one()...
VBoxAutostart       easy_install        pybot
VBoxBalloonCtrl     easy_install-2.7    pyi-archive_viewer
   ((omitted - a bunch more files from the ls -l command))
DEBUG async exit error code: system:0 rc: 0
 - checking to see if it stopped...
 * it stopped!
Program ended with exit code: 0