blocxx
|
Class for communicating with and managing a child process. More...
#include <Process.hpp>
Classes | |
class | Status |
Portable process status. More... | |
Public Types | |
enum | ETerminationSelectionFlag { E_TERMINATE_PROCESS_GROUP, E_TERMINATE_PROCESS_ONLY } |
Public Member Functions | |
Process (UnnamedPipeRef const &in, UnnamedPipeRef const &out, UnnamedPipeRef const &err, ProcId pid) | |
Process (ProcId pid) | |
void | release () |
Releases ownership of the ProcId and UnnamedPipes held by this object. | |
virtual | ~Process () |
If release has been called on this object, does nothing. | |
UnnamedPipeRef | in () const |
Stdin for the child process. | |
UnnamedPipeRef | out () const |
Stdout for the child process. | |
UnnamedPipeRef | err () const |
Stderr for the child process. | |
ProcId | pid () const |
Process ID for the child process. | |
Status | processStatus () |
void | waitCloseTerm (const Timeout &wait_initial=Timeout::relative(5.0), const Timeout &wait_close=Timeout::relative(10.0), const Timeout &wait_term=Timeout::relative(15.0), ETerminationSelectionFlag terminationSelectionFlag=E_TERMINATE_PROCESS_GROUP) |
Waits for the child process to terminate, taking increasingly severe measures to ensure that this happens. | |
void | waitCloseTerm (float wait_initial, float wait_close, float wait_term) |
Waits for the child process to terminate, taking increasingly severe measures to ensure that this happens. | |
Protected Member Functions | |
Process (const ProcessImplRef &impl, UnnamedPipeRef const &in, UnnamedPipeRef const &out, UnnamedPipeRef const &err, ProcId pid) | |
Constructor for derived classes that allow them to override the implementation. | |
Private Member Functions | |
bool | terminatesWithin (const Timeout &wait_time) |
ProcId | getCurProcessId () |
bool | killWait (const Timeout &wait_time, int sig, char const *signame, ETerminationSelectionFlag terminationSelectionFlag) |
Process (Process const &) | |
Copying not allowed (private) | |
void | operator= (Process const &) |
Assignment not allowed (private) | |
Private Attributes | |
ProcessImplRef | m_impl |
UnnamedPipeRef | m_in |
UnnamedPipeRef | m_out |
UnnamedPipeRef | m_err |
ProcId | m_pid |
Status | m_status |
Class for communicating with and managing a child process.
Definition at line 61 of file Process.hpp.
E_TERMINATE_PROCESS_GROUP |
The process and any descendent processes which are in the process group will be terminated. |
E_TERMINATE_PROCESS_ONLY |
The process will be terminated. |
Definition at line 209 of file Process.hpp.
BLOCXX_NAMESPACE::Process::Process | ( | UnnamedPipeRef const & | in, |
UnnamedPipeRef const & | out, | ||
UnnamedPipeRef const & | err, | ||
ProcId | pid | ||
) |
Definition at line 327 of file Process.cpp.
BLOCXX_NAMESPACE::Process::Process | ( | const ProcessImplRef & | impl, |
UnnamedPipeRef const & | in, | ||
UnnamedPipeRef const & | out, | ||
UnnamedPipeRef const & | err, | ||
ProcId | pid | ||
) | [protected] |
Constructor for derived classes that allow them to override the implementation.
This is necessary because destructors shouldn't call virtual functions (it's undefined behavior), so instead of this class having virtual functions, that is moved to ProcessImpl.
Definition at line 340 of file Process.cpp.
BLOCXX_NAMESPACE::Process::Process | ( | ProcId | pid | ) |
Definition at line 354 of file Process.cpp.
BLOCXX_NAMESPACE::Process::~Process | ( | ) | [virtual] |
If release
has been called on this object, does nothing.
Otherwise, closes pipes and waits for process to die, killing it if necessary,
Definition at line 364 of file Process.cpp.
BLOCXX_NAMESPACE::Process::Process | ( | Process const & | ) | [private] |
Copying not allowed (private)
UnnamedPipeRef BLOCXX_NAMESPACE::Process::err | ( | ) | const |
Stderr for the child process.
The default timeout is set to 10 minutes.
Definition at line 415 of file Process.cpp.
ProcId BLOCXX_NAMESPACE::Process::getCurProcessId | ( | ) | [private] |
Definition at line 684 of file Process.cpp.
Referenced by waitCloseTerm().
UnnamedPipeRef BLOCXX_NAMESPACE::Process::in | ( | ) | const |
Stdin for the child process.
The default timeout is set to 10 minutes.
Definition at line 405 of file Process.cpp.
bool BLOCXX_NAMESPACE::Process::killWait | ( | const Timeout & | wait_time, |
int | sig, | ||
char const * | signame, | ||
ETerminationSelectionFlag | terminationSelectionFlag | ||
) | [private] |
Definition at line 662 of file Process.cpp.
References BLOCXX_THROW_ERRNO_MSG, BLOCXX_NAMESPACE::Format::c_str(), m_pid, and processStatus().
Referenced by waitCloseTerm().
void BLOCXX_NAMESPACE::Process::operator= | ( | Process const & | ) | [private] |
Assignment not allowed (private)
UnnamedPipeRef BLOCXX_NAMESPACE::Process::out | ( | ) | const |
Stdout for the child process.
The default timeout is set to 10 minutes.
Definition at line 410 of file Process.cpp.
ProcId BLOCXX_NAMESPACE::Process::pid | ( | ) | const |
Process ID for the child process.
Definition at line 420 of file Process.cpp.
Process::Status BLOCXX_NAMESPACE::Process::processStatus | ( | ) |
ProcessErrorException |
Definition at line 425 of file Process.cpp.
References m_impl, m_pid, and m_status.
Referenced by killWait(), and waitCloseTerm().
void BLOCXX_NAMESPACE::Process::release | ( | ) |
bool BLOCXX_NAMESPACE::Process::terminatesWithin | ( | const Timeout & | wait_time | ) | [private] |
Definition at line 532 of file Process.cpp.
Referenced by waitCloseTerm().
void BLOCXX_NAMESPACE::Process::waitCloseTerm | ( | float | wait_initial, |
float | wait_close, | ||
float | wait_term | ||
) |
Waits for the child process to terminate, taking increasingly severe measures to ensure that this happens.
All times are measured from the start of the function. The following steps are taken in order until termination is detected:
SIGTERM
signal and waits until wait_term seconds have passed for it to die.SIGKILL
signal.In steps 1-3 the function returns as soon as termination is detected. If this function is called a second time it is a no-op, because it immediately sees that the process has already terminated.
SIGTERM
signal is sent.ProcessErrorException |
Definition at line 446 of file Process.cpp.
void BLOCXX_NAMESPACE::Process::waitCloseTerm | ( | const Timeout & | wait_initial = Timeout::relative(5.0) , |
const Timeout & | wait_close = Timeout::relative(10.0) , |
||
const Timeout & | wait_term = Timeout::relative(15.0) , |
||
ETerminationSelectionFlag | terminationSelectionFlag = E_TERMINATE_PROCESS_GROUP |
||
) |
Waits for the child process to terminate, taking increasingly severe measures to ensure that this happens.
All timeouts are measured from the start of the function. The following steps are taken in order until termination is detected:
SIGTERM
signal and waits until wait_term expires for it to die.SIGKILL
signal.In steps 1-3 the function returns as soon as termination is detected. If this function is called a second time it is a no-op, because it immediately sees that the process has already terminated.
SIGTERM
signal is sent.ProcessErrorException |
Definition at line 451 of file Process.cpp.
References BLOCXX_NAMESPACE::TimeoutTimer::asAbsoluteTimeout(), BLOCXX_THROW, BLOCXX_NAMESPACE::Timeout::E_RELATIVE, getCurProcessId(), BLOCXX_NAMESPACE::Timeout::getRelative(), BLOCXX_NAMESPACE::Timeout::getType(), killWait(), m_err, m_in, m_out, m_pid, m_status, processStatus(), BLOCXX_NAMESPACE::Timeout::relative(), BLOCXX_NAMESPACE::Process::Status::terminated(), and terminatesWithin().
Definition at line 288 of file Process.hpp.
Referenced by waitCloseTerm().
Definition at line 285 of file Process.hpp.
Referenced by processStatus().
Definition at line 286 of file Process.hpp.
Referenced by waitCloseTerm().
Definition at line 287 of file Process.hpp.
Referenced by waitCloseTerm().
ProcId BLOCXX_NAMESPACE::Process::m_pid [private] |
Definition at line 289 of file Process.hpp.
Referenced by killWait(), processStatus(), and waitCloseTerm().
Status BLOCXX_NAMESPACE::Process::m_status [private] |
Definition at line 290 of file Process.hpp.
Referenced by processStatus(), and waitCloseTerm().