Ecore Exe: add flag to send SIGTERM when parent die
authorBruno Dilly <bdilly@profusion.mobi>
Fri, 7 Oct 2011 23:37:42 +0000 (23:37 +0000)
committerBruno Dilly <bdilly@profusion.mobi>
Fri, 7 Oct 2011 23:37:42 +0000 (23:37 +0000)
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

legacy/ecore/src/lib/ecore/Ecore.h
legacy/ecore/src/lib/ecore/ecore_exe.c

index b2b2a83..c6b439e 100644 (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;
 
index 07407ef..568a35c 100644 (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))
      {