Date: Fri, 08 Jun 2012 14:43:47 +0000 From: scher@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r237310 - soc2012/scher/par_ports/head/Mk Message-ID: <20120608144347.79970106564A@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
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; \
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120608144347.79970106564A>