diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2020-01-15 02:35:11 +0000 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2020-01-15 12:14:31 +0000 |
commit | 72a8a2ce40ee9913c676f922551f65ca3cdd0e3b (patch) | |
tree | 3a255ffbb5b9cea0794d8c1e726c3dbb2071b307 | |
parent | 77db0820e37b5a2b2f66562a00b8c689b5f2c022 (diff) | |
download | efl-72a8a2ce40ee9913c676f922551f65ca3cdd0e3b.tar.gz |
ecore_exe/efl_exe - implement exit with parent on bsds with procctl
-rw-r--r-- | header_checks/meson.build | 1 | ||||
-rw-r--r-- | src/lib/ecore/ecore_exe_posix.c | 8 | ||||
-rw-r--r-- | src/lib/ecore/efl_exe.c | 12 |
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. |