socsvn commit: r237310 - soc2012/scher/par_ports/head/Mk
scher at FreeBSD.org
scher at FreeBSD.org
Fri Jun 8 14:43:48 UTC 2012
Author: scher
Date: Fri Jun 8 14:43:46 2012
New Revision: 237310
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=237310
Log:
[new_feature] correct termination of the whole process tree with
background processes starting from parent make process
To terminate the whole process tree, starting from some parent make process (pm_pid)
one may just use keyboard interrupts in the right terminal (where the make
process was started) or send signal to internal make script using pkill(1).
e.g. pkill -P pm_pid
Modified:
soc2012/scher/par_ports/head/Mk/bsd.port.mk
Modified: soc2012/scher/par_ports/head/Mk/bsd.port.mk
==============================================================================
--- soc2012/scher/par_ports/head/Mk/bsd.port.mk Fri Jun 8 14:01:01 2012 (r237309)
+++ soc2012/scher/par_ports/head/Mk/bsd.port.mk Fri Jun 8 14:43:46 2012 (r237310)
@@ -5118,11 +5118,38 @@
done; \
echo "debugging_out_here: --- LEAVE _PROCESS_ACTIVE_BUILDS SECTION " > ${PORTSDIR}/tmp/log
+_TERMINATE_PROCESS_TREE= \
+ ${_dparv_START_OUTPUT}; \
+ ${ECHO_CMD} Terminating process tree strating from ${.MAKE.PID}; \
+ pids_to_kill=${.MAKE.PID}; \
+ /bin/kill -STOP ${.MAKE.PID} 2> /dev/null || ${DO_NADA}; \
+ ppids=$$( ps -xao pid,ppid | awk "{ if (\$$2==${.MAKE.PID}) {print \$$1} }" ); \
+ pids_to_kill="$${pids_to_kill} $${ppids}"; \
+ /bin/kill -STOP "$${ppids%%$$$$*} $${ppids\#\#*$$$$}" 2> /dev/null || ${DO_NADA}; \
+ while true; do \
+ tmp_ppids=$$(${ECHO_CMD} $${ppids}); \
+ ppids=""; \
+ for ppid in $${tmp_ppids}; do \
+ children=$$( ps -xao pid,ppid | awk "{ if (\$$2==$${ppid}) {print \$$1} }" ); \
+ if [ $${\#children} -eq 0 ]; then continue; fi; \
+ pids_to_kill="$${pids_to_kill} $${children}"; \
+ ppids="$${ppids} $${children}"; \
+ /bin/kill -STOP $${children} 2> /dev/null || ${DO_NADA}; \
+ done; \
+ if [ $${\#ppids} -eq 0 ]; then break; fi; \
+ done; \
+ ${ECHO_CMD} PIDs to kill: $${pids_to_kill}; \
+ ${_dparv_START_OUTPUT}; \
+ /bin/kill -KILL $${pids_to_kill} 2> /dev/null || ${DO_NADA}
+
.for deptype in PKG EXTRACT PATCH FETCH BUILD RUN
${deptype:L}-depends:
.if defined(${deptype}_DEPENDS)
.if !defined(NO_DEPENDS)
- @depends=`${ECHO_CMD} "${${deptype}_DEPENDS}"`; \
+ @if [ ! ${INSTALLS_DEPENDS} ]; then \
+ trap '${_TERMINATE_PROCESS_TREE}' INT TERM; \
+ fi; \
+ depends=`${ECHO_CMD} "${${deptype}_DEPENDS}"`; \
depends=$$( echo "$${depends}" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$$//' ); \
active_builds=""; \
echo "debugging_out_here: ------------------------- " > ${PORTSDIR}/tmp/log; \
@@ -5265,7 +5292,11 @@
lib-depends:
.if defined(LIB_DEPENDS) && !defined(NO_DEPENDS)
- @depends=`${ECHO_CMD} "${LIB_DEPENDS}"`; \
+ @if [ ! ${INSTALLS_DEPENDS} ]; then \
+ trap '${_TERMINATE_PROCESS_TREE}' INT TERM; \
+ fi; \
+ depends=`${ECHO_CMD} "${LIB_DEPENDS}"`; \
+ depends=$$( echo "$${depends}" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$$//' ); \
active_builds=""; \
echo "debugging_out_here: ------------------------- " > ${PORTSDIR}/tmp/log; \
echo "debugging_out_here: ALL DEPS - $${depends}" > ${PORTSDIR}/tmp/log; \
More information about the svn-soc-all
mailing list