summaryrefslogtreecommitdiffhomepage
path: root/subr/ex_rtl_complex.subr
diff options
context:
space:
mode:
Diffstat (limited to 'subr/ex_rtl_complex.subr')
-rw-r--r--subr/ex_rtl_complex.subr11
1 files changed, 11 insertions, 0 deletions
diff --git a/subr/ex_rtl_complex.subr b/subr/ex_rtl_complex.subr
index 560b35bb..4b8da0ac 100644
--- a/subr/ex_rtl_complex.subr
+++ b/subr/ex_rtl_complex.subr
@@ -27,6 +27,17 @@ ex_rtl_clean_env() {
ex_rtl_unset_vars $(ex_rtl_lfilter "${_env_vars}" "${_env_vars_except}");
};
+ex_rtl_kill_tree() {
+ local _pid="${1}" _signal="TERM" _pid_child="" _pid_top="";
+ for _pid_top in $(pgrep -P "${_pid}"); do
+ for _pid_child in $(pgrep -P "${_pid_top}" 2>/dev/null); do
+ _pids_killed="${_pids_killed:+${_pids_killed} }${_pid_child}"; kill "-${_signal}" "${_pid_child}"
+ 2>/dev/null;
+ done;
+ _pids_killed="${_pids_killed:+${_pids_killed} }${_pid_top}"; kill "-${_signal}" "${_pid_top}" 2>/dev/null;
+ done;
+};
+
ex_rtl_lfilter() {
local _list="${1}" _filter="${2}" _lnew="" _litem="" _litem_filter="" _filterfl="";
if [ -z "${_filter}" ]; then