#!/bin/bash DPATH="/sys/kernel/debug/tracing" ## shell pid PID=$$ [ `id -u` -ne 0 ] && { echo "needs to be root" ; exit 1; } [ -z $1 ] && { echo "needs process name as argument" ; exit 1; } mount | grep -i debugfs &> /dev/null [ $? -ne 0 ] && { echo "debugfs not mounted, mount it first"; exit 1; } # clear existing trace data echo nop > $DPATH/current_tracer # set function_graph tracer echo function_graph > $DPATH/current_tracer # write current process id to set_ftrace_pid file next will trace echo $PID > $DPATH/set_ftrace_pid # start the tracing echo 1 > $DPATH/tracing_on # execute the process # $* all parameter list exec $* # stop the tracing echo 0 > tracing_on
上述为ftrace 某一个process的基本脚本
./trace-process.sh ifconfig eth20 down
就可以看到 ifconfig eth20 down 时 内核运行函数 调用