summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-01-15 02:35:11 +0000
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-01-15 12:14:31 +0000
commit72a8a2ce40ee9913c676f922551f65ca3cdd0e3b (patch)
tree3a255ffbb5b9cea0794d8c1e726c3dbb2071b307
parent77db0820e37b5a2b2f66562a00b8c689b5f2c022 (diff)
downloadefl-72a8a2ce40ee9913c676f922551f65ca3cdd0e3b.tar.gz
ecore_exe/efl_exe - implement exit with parent on bsds with procctl
-rw-r--r--header_checks/meson.build1
-rw-r--r--src/lib/ecore/ecore_exe_posix.c8
-rw-r--r--src/lib/ecore/efl_exe.c12
3 files changed, 19 insertions, 2 deletions
diff --git a/header_checks/meson.build b/header_checks/meson.build
index 3aaf3776c6..1d3f0e171f 100644
--- a/header_checks/meson.build
+++ b/header_checks/meson.build
@@ -97,6 +97,7 @@ function_checks = [
['mmap', ['sys/mman.h']],
['mtrace', ['mcheck.h']],
['prctl', ['sys/prctl.h']],
+ ['procctl', ['sys/procctl.h']],
['realpath', ['stdlib.h']],
['setxattr', ['sys/types.h', 'sys/xattr.h']],
['siglongjmp', ['setjmp.h']],
diff --git a/src/lib/ecore/ecore_exe_posix.c b/src/lib/ecore/ecore_exe_posix.c
index 44d9c73ca8..07f1058ab0 100644
--- a/src/lib/ecore/ecore_exe_posix.c
+++ b/src/lib/ecore/ecore_exe_posix.c
@@ -16,6 +16,8 @@
#ifdef HAVE_PRCTL
# include <sys/prctl.h>
+#elif defined(HAVE_PROCCTL)
+# include <sys/procctl.h>
#endif
#ifdef HAVE_SYS_WAIT_H
@@ -1000,6 +1002,12 @@ _ecore_exe_exec_it(const char *exe_cmd,
{
prctl(PR_SET_PDEATHSIG, SIGTERM);
}
+#elif defined(HAVE_PROCCTL)
+ if ((flags & ECORE_EXE_TERM_WITH_PARENT))
+ {
+ int sig = SIGTERM;
+ procctl(P_PID, 0, PROC_PDEATHSIG_CTL, &sig);
+ }
#endif
if (!(flags & ECORE_EXE_NOT_LEADER)) setsid();
diff --git a/src/lib/ecore/efl_exe.c b/src/lib/ecore/efl_exe.c
index 8609dbfac5..b2c6341523 100644
--- a/src/lib/ecore/efl_exe.c
+++ b/src/lib/ecore/efl_exe.c
@@ -25,8 +25,10 @@
# include <sys/socket.h>
# ifdef HAVE_PRCTL
# include <sys/prctl.h>
+# elif defined(HAVE_PROCCTL)
+# include <sys/procctl.h>
# endif
-# ifdef HAVE_SYS_WAIT_H
+#ifdef HAVE_SYS_WAIT_H
# include <sys/wait.h>
# endif
# ifndef HAVE_CLEARENV
@@ -150,7 +152,13 @@ _exec(const char *cmd, Efl_Exe_Flags flags, Efl_Task_Flags task_flags)
# ifdef HAVE_PRCTL
if (task_flags & EFL_TASK_FLAGS_EXIT_WITH_PARENT)
prctl(PR_SET_PDEATHSIG, SIGTERM);
-# endif
+#elif defined(HAVE_PROCCTL)
+ if (task_flags & EFL_TASK_FLAGS_EXIT_WITH_PARENT)
+ {
+ int sig = SIGTERM;
+ procctl(P_PID, 0, PROC_PDEATHSIG_CTL, &sig);
+ }
+#endif
if (flags & EFL_EXE_FLAGS_GROUP_LEADER) setsid();
if (use_sh) // We have to use a shell to run this.