|  | #!/bin/bash | 
|  | # Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file | 
|  | # for details. All rights reserved. Use of this source code is governed by a | 
|  | # BSD-style license that can be found in the LICENSE file. | 
|  | # | 
|  | # Tracks the peak resident memory being used by running the supplied command. | 
|  | # The output is written to the first argument of the script every second. | 
|  |  | 
|  | function Logger() { | 
|  | output="$1" | 
|  | while sleep 1 | 
|  | do | 
|  | grep "VmHWM\|Threads" /proc/$pid/status >> $output | 
|  | done | 
|  | } | 
|  |  | 
|  | function Exit { | 
|  | kill $lid | 
|  | exit $code | 
|  | } | 
|  |  | 
|  | function Kill { | 
|  | kill $lid | 
|  | kill -9 $pid | 
|  | exit -1 | 
|  | } | 
|  |  | 
|  | if [ $# -lt 2 ]; then | 
|  | echo "Takes at least two arguments" | 
|  | exit 1 | 
|  | fi | 
|  | OUTPUT_FILE=$1 | 
|  | shift 1 | 
|  |  | 
|  | $* & | 
|  | pid=$! | 
|  |  | 
|  | Logger $OUTPUT_FILE & | 
|  | lid=$! | 
|  |  | 
|  | trap "Exit" EXIT | 
|  | trap "Kill" SIGINT | 
|  | wait $pid | 
|  | code=$? |