Kea
1.9.9-git
|
Implementation of the ProcessSpawn
class.
More...
Public Member Functions | |
ProcessSpawnImpl (IOServicePtr io_service, const std::string &executable, const ProcessArgs &args, const ProcessEnvVars &vars) | |
Constructor. More... | |
~ProcessSpawnImpl () | |
Destructor. More... | |
void | clearState (const pid_t pid) |
Removes the status of the process with a specified PID. More... | |
std::string | getCommandLine () const |
Returns full command line, including arguments, for the process. More... | |
int | getExitStatus (const pid_t pid) const |
Returns exit status of the process. More... | |
bool | isAnyRunning () const |
Checks if any of the spawned processes is still running. More... | |
bool | isRunning (const pid_t pid) const |
Checks if the process is still running. More... | |
pid_t | spawn (bool dismiss) |
Spawn the new process. More... | |
Implementation of the ProcessSpawn
class.
This pimpl idiom is used by the ProcessSpawn
in this case to avoid exposing the internals of the implementation, such as custom handling of a SIGCHLD signal, and the conversion of the arguments of the executable from the STL container to the array.
This class is made noncopyable so that we don't have attempts to make multiple copies of an object. This avoid problems with multiple copies of objects for a single global resource such as the SIGCHLD signal handler. In addition making it noncopyable keeps the static check code from flagging the lack of a copy constructor as an issue.
Definition at line 69 of file process_spawn.cc.
isc::asiolink::ProcessSpawnImpl::ProcessSpawnImpl | ( | IOServicePtr | io_service, |
const std::string & | executable, | ||
const ProcessArgs & | args, | ||
const ProcessEnvVars & | vars | ||
) |
Constructor.
io_service | The IOService which handles signal handlers. |
executable | A full path to the program to be executed. |
args | Arguments for the program to be executed. |
vars | Environment variables for the program to be executed. |
Definition at line 192 of file process_spawn.cc.
References isc_throw.
isc::asiolink::ProcessSpawnImpl::~ProcessSpawnImpl | ( | ) |
Destructor.
Definition at line 230 of file process_spawn.cc.
void isc::asiolink::ProcessSpawnImpl::clearState | ( | const pid_t | pid | ) |
Removes the status of the process with a specified PID.
This method removes the status of the process with a specified PID. If the process is still running, the status is not removed and the exception is thrown.
pid | A process pid. |
Definition at line 353 of file process_spawn.cc.
References isc_throw, and isRunning().
std::string isc::asiolink::ProcessSpawnImpl::getCommandLine | ( | ) | const |
Returns full command line, including arguments, for the process.
Definition at line 239 of file process_spawn.cc.
int isc::asiolink::ProcessSpawnImpl::getExitStatus | ( | const pid_t | pid | ) | const |
Returns exit status of the process.
If the process is still running, the previous status is returned or 0, if the process is being ran for the first time.
pid | ID of the child process for which exit status should be returned. |
Definition at line 304 of file process_spawn.cc.
References isc_throw.
bool isc::asiolink::ProcessSpawnImpl::isAnyRunning | ( | ) | const |
Checks if any of the spawned processes is still running.
Definition at line 291 of file process_spawn.cc.
bool isc::asiolink::ProcessSpawnImpl::isRunning | ( | const pid_t | pid | ) | const |
Checks if the process is still running.
pid | ID of the child processes for which state should be checked. |
Definition at line 278 of file process_spawn.cc.
References isc_throw.
Referenced by clearState().
pid_t isc::asiolink::ProcessSpawnImpl::spawn | ( | bool | dismiss | ) |
Spawn the new process.
This method forks the current process and executes the specified binary with arguments within the child process.
The child process will return EXIT_FAILURE if the method was unable to start the executable, e.g. as a result of insufficient permissions or when the executable does not exist. If the process ends successfully the EXIT_SUCCESS is returned.
dismiss | The flag which indicated if the process status can be disregarded. |
ProcessSpawnError | if forking a current process failed. |
Definition at line 254 of file process_spawn.cc.
References isc_throw.