Problem with process creating (boost process v2) in limited linux systems

Open
#529 11 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
25/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
cpp, linux

Research direction

Start with the supplied minimal program and boost/process/v2/process.hpp, reproducing it on the armv7l Buildroot system with BusyBox and glibc 2.29. Compare process creation with the Debian 12 environment and inspect the reported boost::system::system_error path. Done means identifying why the limited system fails and documenting or correcting the behavior with a verified reproduction.

Written by the indexing model from the issue text.

Description

Hello!
I'm using boost::process::v2 (boost version 1.89 - latest stable) in my project with cross-compiling the final binary. If I use the amd64 standard debian 12, all is ok and process creating ended successfully without errors. But if I using it in limited linux (system with busybox, specific process architecture (for example, armv7l)) I getting an unknown exception. Try/catch can't process that exception. Google breakpad also can't give me details.
I checked the system - clone(), execve(), fork() works there. But bp::v2::process give me an unknown exception.
Also I testing on aarch64 (arm64) limited system and on standard linux version system. In standard linux that works great, but on limited system I've got the same error.
Warning: the "limited" version I mean Linux core + standard utilities such as busybox, libc, sh and other configurated extremely necessary utils.
I tested work directory access - all is ok on my side. I running the "/bin/echo" manually from shell, and that works good.

System info:
armv7l, linux version 4.19.91,
GNU C Library (Buildroot) stable release version 2.29.
BusyBox v1.24.1 (2024-03-14 16:36:28 CST) multi-call binary

Binary compiled with GCC 8.3.0

Error log:

Creating process...
terminate called after throwing an instance of 'boost::wrapexcept<boost::system::system_error>'
terminate called recursively
Aborted (core dumped)

Code:

#include <boost/process/v2/process.hpp>
#include <boost/process/v2/stdio.hpp>
#include <boost/program_options/errors.hpp>

#include <iostream>

int main()
{
    try {
        boost::asio::io_context context;
        std::cout << "Creating process..." << std::endl;
        boost::process::v2::process proc(context, "/bin/echo", {"hello", "world!"}, boost::process::v2::process_stdio {});
        std::cout << "Process was created." << std::endl;
        context.run();

        return EXIT_SUCCESS;

    } catch (const boost::program_options::error& ex) {
        std::cout << "Bad CLI: " << ex.what() << std::endl;
    } catch (const boost::system::system_error& error) {
        std::cout << "Exception: " << error.what() << ". Error code: " << error.code() << std::endl;
    } catch (...) {
        std::cout << "Unknown exception has occured." << std::endl;
    }

    return EXIT_FAILURE;
}

Dominant language
C++
Stars
145
Forks
151
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from boostorg/process

All issues in boostorg/process

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.