ONPOSIX
2.0
Main Page
Namespaces
Classes
Files
File List
File Members
ONPOSIX
OnPosix Library
Namespaces
Classes
Files
File List
include
AbstractDescriptorReader.hpp
AbstractThread.hpp
Assert.hpp
Buffer.hpp
DescriptorsMonitor.hpp
DgramSocketClientDescriptor.hpp
DgramSocketServerDescriptor.hpp
FifoDescriptor.hpp
FileDescriptor.hpp
Logger.hpp
Pipe.hpp
PosixCondition.hpp
PosixDescriptor.hpp
PosixMutex.hpp
PosixPrioritySharedQueue.hpp
PosixSharedQueue.hpp
Process.hpp
SimpleThread.hpp
StreamSocketClientDescriptor.hpp
StreamSocketServer.hpp
StreamSocketServerDescriptor.hpp
Time.hpp
src
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Enumerator
Friends
Macros
Pages
Process.hpp
Go to the documentation of this file.
1
/*
2
* Process.hpp
3
*
4
* Copyright (C) 2012 Evidence Srl - www.evidence.eu.com
5
*
6
* This library is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Library General Public
8
* License as published by the Free Software Foundation; either
9
* version 2 of the License, or (at your option) any later version.
10
*
11
* This library is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Library General Public License for more details.
15
*
16
* You should have received a copy of the GNU Library General Public
17
* License along with this library; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#ifndef PROCESS_HPP_
22
#define PROCESS_HPP_
23
24
#include <sys/types.h>
25
#include <unistd.h>
26
#include <string>
27
#include <vector>
28
29
// Uncomment to enable Linux-specific methods:
30
#define ONPOSIX_LINUX_SPECIFIC
31
32
namespace
onposix {
33
34
/**
35
* \brief Class for launching a new process
36
*
37
* Class to launch a process through fork().
38
*
39
* Example of usage to run a function:
40
* \code
41
*
42
* void function ()
43
* {
44
* //...
45
* }
46
*
47
* int main ()
48
* {
49
* Process p(function);
50
* }
51
* \endcode
52
*
53
* Example of usage to run a program (i.e., through for()+execvp())
54
* \code
55
*
56
* int main ()
57
* {
58
* std::vector<std::string> args;
59
* args.push_back("-l");
60
* args.push_back("*.cpp");
61
*
62
* Process p("ls", args);
63
* }
64
* \endcode
65
*/
66
class
Process
{
67
68
/**
69
* \brief Pid of the new process
70
*
71
* This value contains the pid of the new process for both the
72
* parent process and the child process (who sees its own pid)
73
*/
74
pid_t
pid_
;
75
76
/**
77
* \brief If the class instance is related to the current process
78
*
79
* In a parent-child relationship, this variable is useful to
80
* distinguish between the parent and the child.
81
* This variable is euql to false for the parent (i.e., the process
82
* who created the new process) and equal to true for the child
83
* process (i.e., the one who has been created).
84
*/
85
bool
is_child_
;
86
87
/**
88
* \brief If the process is running
89
*/
90
bool
running_
;
91
92
/**
93
* \brief Exit status of the child process when terminated.
94
*
95
* The child process can be terminated by the parent through
96
* sendSignal(KILL). The parent can also waith the normal termination
97
* of the child through waitForTermination().
98
*/
99
int
status_
;
100
101
void
createProcess
();
102
103
public
:
104
105
/**
106
* \brief Get PID of the process related to this instance
107
*
108
* This value is the pid of the new process for both the
109
* parent process and the child process (who gets its own pid)
110
*/
111
inline
pid_t
getPid
()
const
{
112
return
pid_
;
113
}
114
115
Process
(
void
(*
function
)(
void
));
116
117
Process
(
const
std::string& program,
118
const
std::vector<std::string>& args);
119
120
121
bool
waitForTermination
();
122
inline
bool
checkNormalTermination
();
123
inline
bool
checkSignalTermination
();
124
bool
sendSignal
(
int
sig);
125
static
bool
setSignalHandler
(
int
sig,
void
(*handler) (
int
));
126
bool
setSchedParam
(
int
policy,
int
priority);
127
bool
getSchedParam
(
int
* policy,
int
* priority);
128
129
#if defined(ONPOSIX_LINUX_SPECIFIC) && defined(__GLIBC__) && \
130
((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ > 3)))
131
// Functions to get/set affinity are available only from glibc 2.4
132
void
setAffinity(
const
std::vector<bool>& s);
133
void
getAffinity(std::vector<bool>* v);
134
#endif
/* ONPOSIX_LINUX_SPECIFIC && GLIBC */
135
};
136
137
}
/* onposix */
138
139
#endif
/* PROCESS_HPP_ */
include
Process.hpp
Generated on Wed Apr 30 2014 15:27:24 for ONPOSIX by
1.8.1.2