external: prevent a child process from killing a process on cleanup
This commit is contained in:
parent
e10a5fd0a5
commit
bcdbdbac6a
2 changed files with 14 additions and 1 deletions
|
|
@ -114,6 +114,12 @@ public:
|
||||||
*/
|
*/
|
||||||
wait::Result wait_for(const wait::Flags& flags);
|
wait::Result wait_for(const wait::Flags& flags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Mark the child process to not to be killed when the ChildProcess
|
||||||
|
* instance goes away.
|
||||||
|
*/
|
||||||
|
void dont_kill_on_cleanup();
|
||||||
|
|
||||||
#ifndef ANDROID
|
#ifndef ANDROID
|
||||||
/**
|
/**
|
||||||
* @brief Access this process's stderr.
|
* @brief Access this process's stderr.
|
||||||
|
|
|
||||||
|
|
@ -303,7 +303,7 @@ struct ChildProcess::Private
|
||||||
~Private()
|
~Private()
|
||||||
{
|
{
|
||||||
// Check if we are in the original parent process.
|
// Check if we are in the original parent process.
|
||||||
if (original_parent_pid == getpid())
|
if (original_parent_pid == getpid() && !dont_kill_on_cleanup)
|
||||||
{
|
{
|
||||||
// If so, check if we are considering a valid pid here.
|
// If so, check if we are considering a valid pid here.
|
||||||
// If so, we kill the original child.
|
// If so, we kill the original child.
|
||||||
|
|
@ -333,6 +333,8 @@ struct ChildProcess::Private
|
||||||
// is called from the child process.
|
// is called from the child process.
|
||||||
pid_t original_parent_pid;
|
pid_t original_parent_pid;
|
||||||
pid_t original_child_pid;
|
pid_t original_child_pid;
|
||||||
|
|
||||||
|
bool dont_kill_on_cleanup = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
ChildProcess ChildProcess::invalid()
|
ChildProcess ChildProcess::invalid()
|
||||||
|
|
@ -395,6 +397,11 @@ wait::Result ChildProcess::wait_for(const wait::Flags& flags)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChildProcess::dont_kill_on_cleanup()
|
||||||
|
{
|
||||||
|
d->dont_kill_on_cleanup = true;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef ANDROID
|
#ifndef ANDROID
|
||||||
std::istream& ChildProcess::cerr()
|
std::istream& ChildProcess::cerr()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue