- 论坛徽章:
- 1
|
The truss command is available in AIX starting in at version 5.1. The following shell script emulates the truss functionality in AIX 4.3.
--------------------------------------------------------------------------------
#!/bin/ksh
# Name: truss.sh
# Purpose: to make AIX trace look like the truss command
# Caveat: Unsupported tool. Use at your own risk.
show_usage()
{
echo "Usage: $0 [-P] [-n] [-p pid] [-t tempfile][-s sleeptime | command]"
echo " -P show process id's in the output"
echo " -n show process names in the output"
echo " -p pid trcrpt only for this pid"
echo " -s seconds trace for period of time"
echo " -t tempfile path name to file that will be used for trace"
echo " command execute this command and stop trace\c"
echo " after command is done.\n"
exit 0
}
[ "$#" = 0 ] && show_usage
set -- `getopt t:s:p:nP "$@"` || show_usage
while :; do
case $1 in
-s) sleeptime=$2
shift 2;;
-p) pid=$2
shift 2;;
-n) EXEC="exec=on,"
shift;;
-P) PIDNUM="pid=on,"
shift;;
--) shift
break;;
esac
done
command="$*"
[ -n "$command" -a -n "$sleeptime" ] && show_usage
[ -n "$pid" ] && PID="-p $pid"
hooks="101,104,107,106,134,139,15B,130,19C,163,169,120,122,108,12E,14C,154,\
152,15F,14E,137,135,13A,19B,13E,174,175,176,177,178,179,17A,17B,17D,17E,\
17F,1A7,1A8,1A4,1A5,1A6,180,18F,195,18E,1A9,1AA,1AC,1AB,1F0,1AF,1AE,1AD"
do_trace()
{
logsize=$1;bufsize=$2;
trace -n -a -L $logsize -T $bufsize -j $hooks -do trace.out || return $?
}
do_trace 8000000 4000000 || {
echo "You do not have privilege as this uid to allocate a large trace buffer"
echo "Trying with a smaller buffer, but you may lose data"
do_trace 8000000 1000000 || {
echo "You do not have privilege as this uid to allocate a large trace buffer"
trcstop
exit 1
}
}
trcon
if [ -n "$sleeptime" ]; then
sleep $sleeptime
else
$command # run the command
fi
# do whatever you want here
trcstop
trcrpt -k 106 ${PID} -h -O ${EXEC}${PIDNUM}ids=0,timestamp=3 trace.out # > trcrpt.out
|
|
|