1*387f9dfdSAndroid Build Coastguard Worker#!/usr/bin/python 2*387f9dfdSAndroid Build Coastguard Worker# 3*387f9dfdSAndroid Build Coastguard Worker# This is a Hello World example that formats output as fields. 4*387f9dfdSAndroid Build Coastguard Worker 5*387f9dfdSAndroid Build Coastguard Workerfrom bcc import BPF 6*387f9dfdSAndroid Build Coastguard Workerfrom bcc.utils import printb 7*387f9dfdSAndroid Build Coastguard Worker 8*387f9dfdSAndroid Build Coastguard Worker# define BPF program 9*387f9dfdSAndroid Build Coastguard Workerprog = """ 10*387f9dfdSAndroid Build Coastguard Workerint hello(void *ctx) { 11*387f9dfdSAndroid Build Coastguard Worker bpf_trace_printk("Hello, World!\\n"); 12*387f9dfdSAndroid Build Coastguard Worker return 0; 13*387f9dfdSAndroid Build Coastguard Worker} 14*387f9dfdSAndroid Build Coastguard Worker""" 15*387f9dfdSAndroid Build Coastguard Worker 16*387f9dfdSAndroid Build Coastguard Worker# load BPF program 17*387f9dfdSAndroid Build Coastguard Workerb = BPF(text=prog) 18*387f9dfdSAndroid Build Coastguard Workerb.attach_kprobe(event=b.get_syscall_fnname("clone"), fn_name="hello") 19*387f9dfdSAndroid Build Coastguard Worker 20*387f9dfdSAndroid Build Coastguard Worker# header 21*387f9dfdSAndroid Build Coastguard Workerprint("%-18s %-16s %-6s %s" % ("TIME(s)", "COMM", "PID", "MESSAGE")) 22*387f9dfdSAndroid Build Coastguard Worker 23*387f9dfdSAndroid Build Coastguard Worker# format output 24*387f9dfdSAndroid Build Coastguard Workerwhile 1: 25*387f9dfdSAndroid Build Coastguard Worker try: 26*387f9dfdSAndroid Build Coastguard Worker (task, pid, cpu, flags, ts, msg) = b.trace_fields() 27*387f9dfdSAndroid Build Coastguard Worker except ValueError: 28*387f9dfdSAndroid Build Coastguard Worker continue 29*387f9dfdSAndroid Build Coastguard Worker except KeyboardInterrupt: 30*387f9dfdSAndroid Build Coastguard Worker exit() 31*387f9dfdSAndroid Build Coastguard Worker printb(b"%-18.9f %-16s %-6d %s" % (ts, task, pid, msg)) 32