Imported Upstream version 1.64.0
[platform/upstream/boost.git] / boost / process / detail / posix / group_ref.hpp
1 // Copyright (c) 2016 Klemens D. Morgenstern
2 //
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6 #ifndef BOOST_PROCESS_DETAIL_POSIX_GROUP_REF_HPP_
7 #define BOOST_PROCESS_DETAIL_POSIX_GROUP_REF_HPP_
8
9 #include <boost/process/detail/config.hpp>
10 #include <boost/process/detail/posix/group_handle.hpp>
11 #include <boost/process/detail/posix/handler.hpp>
12 #include <unistd.h>
13
14
15 namespace boost { namespace process {
16
17 namespace detail { namespace posix {
18
19
20
21 struct group_ref : handler_base_ext
22 {
23     group_handle & grp;
24
25
26     explicit group_ref(group_handle & g) :
27                 grp(g)
28     {}
29
30     template <class Executor>
31     void on_exec_setup(Executor& exec) const
32     {
33         if (grp.grp == -1)
34             ::setpgid(0, 0);
35         else
36             ::setpgid(0, grp.grp);
37     }
38
39     template <class Executor>
40     void on_success(Executor& exec) const
41     {
42         if (grp.grp == -1)
43             grp.grp = exec.pid;
44
45     }
46
47 };
48
49 }}}}
50
51
52 #endif /* BOOST_PROCESS_DETAIL_POSIX_GROUP_REF_HPP_ */