X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=usttrace;h=b28a8d018609e4a80bec867afac0e34c6d81a7f7;hb=6c42ce2c7f9c9f2c91170e87029c9c2702a76c6e;hp=1db591f366495b14df7007a2a7ac026d6f541a70;hpb=63f16f2e575c64c94e8b6683e327e4ab31c59231;p=ust.git diff --git a/usttrace b/usttrace index 1db591f..b28a8d0 100755 --- a/usttrace +++ b/usttrace @@ -7,6 +7,22 @@ function error() { echo "$0: error: $1" 2>/dev/stderr } +function sighandler() { + echo "Caught Ctrl-C" + if [ -z "$USTDPID" ]; then + USTDPID="$(<$pidfilepath)" + fi + # Tell the daemon to die + kill -SIGTERM "$USTDPID" + + echo "Waiting for ustd to shutdown..." + wait "$USTDPID" + + rm "$pidfilepath" + + exit 0; +} + USTTRACE_DIR="$(dirname $0)" if [ -x "${USTTRACE_DIR}/ustd/ustd" ] ; then # Use the not installed libraries instead @@ -23,7 +39,7 @@ else fi LIBINTERFORK_PATH="libinterfork.so" LIBMALLOCWRAP_PATH="libmallocwrap.so" - LIBUST_PATH="libust.so" + LIBUST_PATH="libust.so.0" fi BASE_TRACE_DIR="${HOME}/.usttraces" @@ -40,13 +56,14 @@ function usage () { echo " -s Use system-wide daemon instead of creating one for this session." 2>/dev/stderr } -while getopts ":hlLmfs" options; do +while getopts ":hlLmfsW" options; do case $options in l) arg_preload_libust=1;; L) arg_ld_std_ust=1;; m) arg_preload_malloc=1;; f) arg_preload_fork=1;; s) arg_syswide_daemon=1;; + W) where=1;; h) usage; exit 0;; \?) usage @@ -57,6 +74,11 @@ while getopts ":hlLmfs" options; do done shift $(($OPTIND - 1)) +if [ -n "$where" ]; then + echo $BASE_TRACE_DIR/$(ls "$BASE_TRACE_DIR" | tail -n 1) + exit 0 +fi + # Prepare vars CMD=$* @@ -74,21 +96,29 @@ then fi # Create directory for trace output -DATESTRING="$(hostname)-$(date +%Y%m%d%H%M%S)" +DATESTRING="$(hostname)-$(date +%Y%m%d%H%M%S%N)" OUTDIR="$BASE_TRACE_DIR/$DATESTRING" mkdir -p "$OUTDIR" -# Choose socket path -SOCKPATH="/tmp/ust-sock-$$" +# Choose ustd socket path +USTDSOCKPATH="/tmp/ustd-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 mkfifo -m 0600 "$pidfilepath" # Start daemon - $USTD --pidfile "$pidfilepath" -s "$SOCKPATH" -o "$OUTDIR" >"$OUTDIR/ustd.log" 2>&1 & + $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 + # we open pidfile + # we block reading pidfile + # ustd writes to pidfile + # ustd closes pidfile + # we unblock reading pidfile USTDPID="$(<$pidfilepath)" - export UST_DAEMON_SOCKET="$SOCKPATH" + export UST_DAEMON_SOCKET="$USTDSOCKPATH" fi # Establish the environment for the command @@ -121,12 +151,6 @@ fi export LD_PRELOAD="$LD_PRELOAD:$LIBINTERFORK_PATH" fi -# Install a handler for SIGIO. This is the signal that will be sent by ustd to -# the traced program to trigger the creation of its listener thread. However, -# it is possible that the SIGIO will be sent after the shell fork, but before -# the exec of the command. If this handler isn't there, bash might terminate -# because of a unhandled signal. - # Execute the command $CMD 2>&1 ) | tee "$OUTDIR/app.log"