53 lines
1.1 KiB
C++
53 lines
1.1 KiB
C++
// 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&) 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_ */
|