X-Git-Url: http://git.lttng.org/?p=ust.git;a=blobdiff_plain;f=usttrace;h=d1a6e5fef71b1c3ee6db7c609557e8ae640a83ae;hp=94404dde6d56e0bba1ef9aee9f299d328ba9f361;hb=HEAD;hpb=d1fa5f354b7e6a85c697d762198fb9cb0deef339 diff --git a/usttrace b/usttrace index 94404dd..d1a6e5f 100755 --- a/usttrace +++ b/usttrace @@ -1,22 +1,22 @@ -#!/bin/bash +#!/bin/sh # usttrace by Pierre-Marc Fournier 2009 # Distributed under the GPLv2. -function error() { - echo "$0: error: $1" 2>/dev/stderr +error() { + echo "$0: error: $1" 1>&2 } -function sighandler() { +sighandler() { echo "Caught Ctrl-C" - if [ -z "$USTDPID" ]; then - USTDPID="$(<$pidfilepath)" + if [ -z "${UST_CONSUMERD_PID}" ]; then + UST_CONSUMERD_PID=`cat $pidfilepath` fi # Tell the daemon to die - kill -SIGTERM "$USTDPID" + kill -TERM "${UST_CONSUMERD_PID}" - echo "Waiting for ustd to shutdown..." - wait "$USTDPID" + echo "Waiting for ust-consumerd to shutdown..." + wait "${UST_CONSUMERD_PID}" rm "$pidfilepath" @@ -24,17 +24,17 @@ function sighandler() { } USTTRACE_DIR="$(dirname $0)" -if [ -x "${USTTRACE_DIR}/ustd/ustd" ] ; then +if [ -x "${USTTRACE_DIR}/ust-consumerd/ust-consumerd" ] ; then # Use the not installed libraries instead - USTD="${USTTRACE_DIR}/ustd/ustd" + UST_CONSUMERD="${USTTRACE_DIR}/ust-consumerd/ust-consumerd" LIBINTERFORK_PATH="${USTTRACE_DIR}/libustfork/.libs/libustfork.so" LIBMALLOCWRAP_PATH="${USTTRACE_DIR}/libustinstr-malloc/.libs/libustinstr-malloc.so" LIBUST_PATH="${USTTRACE_DIR}/libust/.libs/libust.so" else # Use the libraries that the dynamic link finds - USTD="ustd" - if [ ! -x "$(which ustd 2>/dev/null)" ]; then - error "cannot find an executable ustd; make sure its location is in the PATH" + UST_CONSUMERD="ust-consumerd" + if [ ! -x "$(which ust-consumerd 2>/dev/null)" ]; then + error "cannot find an executable ust-consumerd; make sure its location is in the PATH" exit 1 fi LIBINTERFORK_PATH="libustfork.so" @@ -44,19 +44,19 @@ fi BASE_TRACE_DIR="${HOME}/.usttraces" -function usage () { - echo "usage: $0 OPTIONS COMMAND" 2>/dev/stderr - echo "" 2>/dev/stderr - echo "Options:" 2>/dev/stderr - echo " -l Runtime link with UST library." 2>/dev/stderr - echo " (Needed only if program was not linked at compile time with libust.)" 2>/dev/stderr - echo " -L Add path to ust libraries to LD_LIBRARY_PATH." 2>/dev/stderr - echo " -m Instrument malloc calls." 2>/dev/stderr - echo " -f Also trace forked processes." 2>/dev/stderr - echo " -s Use system-wide daemon instead of creating one for this session." 2>/dev/stderr - echo " -S Specify the subbuffer size." 2>/dev/stderr - echo " -N Specify the number of subbuffers." 2>/dev/stderr - echo " -o Output directory of the trace." 2>/dev/stderr +usage() { + echo "usage: $0 OPTIONS COMMAND" 1>&2 + echo "" 1>&2 + echo "Options:" 1>&2 + echo " -l Runtime link with UST library." 1>&2 + echo " (Needed only if program was not linked at compile time with libust.)" 1>&2 + echo " -L Add path to ust libraries to LD_LIBRARY_PATH." 1>&2 + echo " -m Instrument malloc calls." 1>&2 + echo " -f Also trace forked processes." 1>&2 + echo " -s Use system-wide daemon instead of creating one for this session." 1>&2 + echo " -S Specify the subbuffer size." 1>&2 + echo " -N Specify the number of subbuffers." 1>&2 + echo " -o Output directory of the trace." 1>&2 } while getopts ":hlLmfsWS:N:o:" options; do @@ -85,16 +85,13 @@ if [ -n "$where" ]; then exit 0 fi -# Prepare vars -CMD=$* - # Validate input if [ -z "$HOME" ]; then error "no home specified" fi -if [ -z "$CMD" ]; +if [ -z "$*" ]; then error "no command specified" usage; @@ -117,25 +114,25 @@ if [ ! -d "$OUTDIR" ]; then fi fi -# Choose ustd socket path -USTDSOCKPATH="/tmp/ustd-sock-$$" +# Choose ust-consumerd socket path +UST_CONSUMERD_SOCKPATH="/tmp/ust-consumerd-sock-$$" if [ "$arg_syswide_daemon" != "1" ]; then - pidfilepath="/tmp/usttrace-$USER-$(date +%Y%m%d%H%M%S%N)-ustd-pid" - trap "sighandler $pidfilepath" SIGINT + pidfilepath="/tmp/usttrace-$USER-$(date +%Y%m%d%H%M%S%N)-ust-consumerd-pid" + trap "sighandler $pidfilepath" INT mkfifo -m 0600 "$pidfilepath" # Start daemon - $USTD --pidfile "$pidfilepath" -s "$USTDSOCKPATH" -o "$OUTDIR" >"$OUTDIR/ustd.log" 2>&1 & - # ustd sets up its server socket - # ustd opens the pidfile, blocks because no one has opened it + ${UST_CONSUMERD} --pidfile "$pidfilepath" -s "${UST_CONSUMERD_SOCKPATH}" -o "$OUTDIR" >"$OUTDIR/ust-consumerd.log" 2>&1 & + # ust-consumerd sets up its server socket + # ust-consumerd opens the pidfile, blocks because no one has opened it # we open pidfile # we block reading pidfile - # ustd writes to pidfile - # ustd closes pidfile + # ust-consumerd writes to pidfile + # ust-consumerd closes pidfile # we unblock reading pidfile - USTDPID="$(<$pidfilepath)" - export UST_DAEMON_SOCKET="$USTDSOCKPATH" + UST_CONSUMERD_PID=`cat $pidfilepath` + export UST_DAEMON_SOCKET="${UST_CONSUMERD_SOCKPATH}" fi # Establish the environment for the command @@ -196,7 +193,7 @@ fi fi # Execute the command - $CMD 2>&1 + "$@" 2>&1 ) | tee "$OUTDIR/app.log" ## Because of the keepalive mechanism, we're sure that by the time @@ -206,10 +203,10 @@ fi if [ "$arg_syswide_daemon" != "1" ]; then # Tell the daemon to die - kill -SIGTERM "$USTDPID" + kill -TERM "${UST_CONSUMERD_PID}" - echo "Waiting for ustd to shutdown..." - wait "$USTDPID" + echo "Waiting for ust-consumerd to shutdown..." + wait "${UST_CONSUMERD_PID}" rm "$pidfilepath" fi