diff options
Diffstat (limited to 'boost/process/detail/posix/group_ref.hpp')
-rw-r--r-- | boost/process/detail/posix/group_ref.hpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/boost/process/detail/posix/group_ref.hpp b/boost/process/detail/posix/group_ref.hpp new file mode 100644 index 0000000000..d46e631fe7 --- /dev/null +++ b/boost/process/detail/posix/group_ref.hpp @@ -0,0 +1,52 @@ +// Copyright (c) 2016 Klemens D. Morgenstern +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_DETAIL_POSIX_GROUP_REF_HPP_ +#define BOOST_PROCESS_DETAIL_POSIX_GROUP_REF_HPP_ + +#include <boost/process/detail/config.hpp> +#include <boost/process/detail/posix/group_handle.hpp> +#include <boost/process/detail/posix/handler.hpp> +#include <unistd.h> + + +namespace boost { namespace process { + +namespace detail { namespace posix { + + + +struct group_ref : handler_base_ext +{ + group_handle & grp; + + + explicit group_ref(group_handle & g) : + grp(g) + {} + + template <class Executor> + void on_exec_setup(Executor& exec) const + { + if (grp.grp == -1) + ::setpgid(0, 0); + else + ::setpgid(0, grp.grp); + } + + template <class Executor> + void on_success(Executor& exec) const + { + if (grp.grp == -1) + grp.grp = exec.pid; + + } + +}; + +}}}} + + +#endif /* BOOST_PROCESS_DETAIL_POSIX_GROUP_REF_HPP_ */ |