#!/bin/sh # # dstack: A simple pstack replacement # Copyright (c) 2012 Daniel van Vugt # if [ -z "$1" ]; then echo "dstack 1.0 Copyright (c) 2012 Daniel van Vugt " echo "Usage: $0 " return fi pid=`pidof $1` if [ -z "$pid" ]; then pid="$1" fi if [ -d "/proc/$pid" ]; then lines=`cat /proc/$pid/maps` || { echo "Error: Insufficient permission to access process $pid." echo "Try: sudo $0 $*" return } else echo "Error: $pid is not a process name or a process ID." return fi echo "Process ID: $pid" progname=`awk '{print $2}' "/proc/$pid/stat" | sed 's/[()]//g'` progpath=`readlink /proc/$pid/exe` threads=`awk '{print $20}' "/proc/$pid/stat"` echo "Program name: $progname" echo "Program path: $progpath" echo "Thread count: $threads" echo "" script="/tmp/dstackscript$$" echo "echo Dstack of $progname pid $pid ($progpath)\\\\n" > "$script" t=1 while [ "$t" -le "$threads" ]; do echo "echo \\\\n" >> "$script" echo "thread $t" >> "$script" echo "bt" >> "$script" t=`expr $t + 1` done echo quit >> "$script" echo yes >> "$script" gdb -q -x "$script" "$progpath" "$pid" | grep -A999 "Dstack of " rm -f "$script"