X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=fast_make.sh;h=8de13fce16ea25cc8cc68abb3b3ba0d67b5bef60;hb=5a7da4aedae5c204bc55c187717193e5950f9a44;hp=2007b0bec62a1dcae2a09ede2483f479a81f40f4;hpb=ea61e98aed4316bda8b156aea5980b08eaf4302b;p=clitk.git diff --git a/fast_make.sh b/fast_make.sh index 2007b0b..8de13fc 100755 --- a/fast_make.sh +++ b/fast_make.sh @@ -1,21 +1,36 @@ #!/bin/bash -vv_dir=$(dirname $(readlink -e $(which $0))) +temp=$(which "$0") +temp=$(readlink -e "${temp}") +vv_dir=$(dirname "${temp}") echo clitk3 directory: $vv_dir -cd ${vv_dir}/build +cd "${vv_dir}/build" function handle_exit { rm mem_use 2>>/dev/null - killall -s SIGCONT make - killall make - killall cc1plus + #kill -s SIGCONT ${make_pid} $(get_descendance ${make_pid}) + #sleep 1 + kill -9 $(get_descendance ${make_pid}) + kill -9 ${make_pid} echo "Terminated, exiting..." + sleep 1 echo echo exit } +function get_descendance +{ + children=$(ps --ppid $1 -o pid --no-headers) + local desc="" + for c in $children + do + desc="${desc} ${c} $(get_descendance $c)" + done + echo $desc +} + trap handle_exit SIGINT available_mem=$(cat /proc/meminfo | grep MemTotal | grep -o [0-9]*) if [ -a "memory_exhausted_lock" ] @@ -27,7 +42,7 @@ then sleep 1 make -j${cpus} else #use all the available computing power by default - cpus=$(( $(cat /proc/cpuinfo | grep -c ^processor) + 2 )) + cpus=$(( $(cat /proc/cpuinfo | grep -c ^processor) + 0 )) echo "Building with ${cpus} cpus..." fi @@ -35,38 +50,46 @@ nice -n12 ionice -c3 make -j ${cpus} $@ & make_pid=$(jobs -p %nice) #watch memory use to avoid crashes -#while ps $make_pid >>/dev/null -#do -# if [ x"$(ps aux | grep cc1plus | grep -v grep | wc -l)" != x0 ] -# then -# ps ax -o vsize,comm | grep cc1plus | grep -o "\<[0-9]*\>" > mem_use -# used_mem=$(awk 'BEGIN {sum=0;} {sum+=$1;} END {print sum;}' mem_use) -# if (( "$used_mem"> ($available_mem - 300) )) -# then -# touch memory_exhausted_lock -# echo "Stopping due to exagerated memory use ( $used_mem )" -# handle_exit -# elif (( "$used_mem"> ($available_mem/2) )) -# then -# if [ x$high_mem != xtrue ] -# then -# echo "Warning, high memory use, not spawning any more compilation jobs... ( $used_mem )" -# killall -s SIGSTOP make -# killall -s SIGCONT cc1plus -# high_mem="true" -# date_mem=$(date +%s) -# fi -# echo mem $used_mem / $available_mem -# elif [ x$high_mem = xtrue ] && (( $(date +%s) > ( $date_mem + 5 ) )) -# then -# echo "Memory use back to normal" -# high_mem="" -# killall -s SIGCONT make -# fi -# rm mem_use -# fi -# sleep 1 -#done -#rm memory_exhausted_lock 2>>/dev/null +while ps $make_pid >>/dev/null +do + descendance=$(get_descendance ${make_pid}) + #echo ${make_pid} $descendance + ps -o vsize --no-headers ${make_pid} ${descendance} > mem_use + used_mem=$(awk 'BEGIN {sum=0;} {sum+=$1;} END {print sum;}' mem_use) + if (( "$used_mem"> ($available_mem - 300) )) + then + touch memory_exhausted_lock + echo "Stopping due to exagerated memory use ( $used_mem )" + handle_exit + elif (( "$used_mem"> ($available_mem/2) )) + then + if [ x$high_mem != xtrue ] + then + echo "Warning, high memory use, not spawning any more compilation jobs... ( $used_mem )" + #Stop all make commands + for pid in ${make_pid} ${descendance} + do + (ps --no-headers -o command ${pid} | grep make &>/dev/null) && kill -s SIGSTOP ${pid} + done + high_mem="true" + date_mem=$(date +%s) + fi + echo mem $used_mem / $available_mem + elif [ x$high_mem = xtrue ] && (( $(date +%s) > ( $date_mem + 5 ) )) + then + echo "Memory use back to normal" + high_mem="" + #Restart all make commands + for pid in ${make_pid} ${descendance} + do + (ps --no-headers -o command ${pid} | grep make &>/dev/null) && kill -s SIGCONT ${pid} + done + fi + rm mem_use + sleep 1 +done +rm memory_exhausted_lock 2>>/dev/null +echo Waiting for remaining jobs... +wait echo Done! echo