Ecore Exe: add flag to send SIGTERM when parent die

Add a new ecore exe flag, ECORE_EXE_TERM_WITH_PARENT,
that will operate on child process,
sending a SIGTERM when parent process dies.



SVN revision: 63915
This commit is contained in:
Bruno Dilly 2011-10-07 23:37:42 +00:00
parent 4364c5720c
commit 8bc303995a
2 changed files with 8 additions and 1 deletions

View File

@ -654,7 +654,8 @@ extern "C" {
ECORE_EXE_PIPE_AUTO = 32, /**< stdout and stderr are buffered automatically */
ECORE_EXE_RESPAWN = 64, /**< FIXME: Exe is restarted if it dies */
ECORE_EXE_USE_SH = 128, /**< Use /bin/sh to run the command. */
ECORE_EXE_NOT_LEADER = 256 /**< Do not use setsid() to have the executed process be its own session leader */
ECORE_EXE_NOT_LEADER = 256, /**< Do not use setsid() to have the executed process be its own session leader */
ECORE_EXE_TERM_WITH_PARENT = 512 /**< Makes child receive SIGTERM when parent dies. */
};
typedef enum _Ecore_Exe_Flags Ecore_Exe_Flags;

View File

@ -14,6 +14,7 @@
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/prctl.h>
#ifdef HAVE_SYS_WAIT_H
# include <sys/wait.h>
@ -1509,6 +1510,11 @@ _ecore_exe_exec_it(const char *exe_cmd, Ecore_Exe_Flags flags)
}
}
if ((flags & ECORE_EXE_TERM_WITH_PARENT))
{
prctl(PR_SET_PDEATHSIG, SIGTERM);
}
if (!(flags & ECORE_EXE_NOT_LEADER)) setsid();
if ((flags & ECORE_EXE_USE_SH))
{