2 * Copyright © 2013 Canonical Ltd.
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License version 3,
6 * as published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 * Authored by: Thomas Voß <thomas.voss@canonical.com>
19 #ifndef CORE_POSIX_PROCESS_H_
20 #define CORE_POSIX_PROCESS_H_
22 #include <core/posix/process_group.h>
23 #include <core/posix/signalable.h>
24 #include <core/posix/this_process.h>
25 #include <core/posix/visibility.h>
26 #include <core/posix/wait.h>
29 #include <system_error>
40 * @brief The Process class models a process and possible operations on it.
42 * The process class is implicitly shared.
44 class CORE_POSIX_DLL_PUBLIC Process : public Signalable
48 * @brief Creates a process instance wrapping an existing process.
49 * @throw Throw std::system_error if pid is invalid, i.e., pid < 0.
50 * @param pid The process identifier of the existing process.
52 explicit Process(pid_t pid);
55 * @brief Returns an invalid instance for testing purposes.
56 * @return An invalid instance.
58 static Process invalid();
61 * @brief Frees resources associated with the process.
63 virtual ~Process() noexcept;
66 * @brief Query the pid of the process.
67 * @return The pid of the process.
69 virtual pid_t pid() const;
72 * @brief Queries the id of the process group this process belongs to.
73 * @throw std::system_error in case of errors.
74 * @return The id of the process group this process belongs to.
76 virtual ProcessGroup process_group_or_throw() const;
79 * @brief Queries the id of the process group this process belongs to.
81 * @return A tuple with the first element being the id of the process group
82 * this process belongs to and the second element a boolean flag indicating
85 virtual ProcessGroup process_group(std::error_code& se) const noexcept(true);
88 struct CORE_POSIX_DLL_LOCAL Private;
89 std::shared_ptr<Private> d;
93 #endif // CORE_POSIX_PROCESS_H_