begin(that is, the start of the session) triggers the handler enclosed in{ }, which simply prints hello world followed by a new-line, then exits.Note
printf () statement is one of the simplest functions for printing data. printf () can also be used to display data using a wide variety of SystemTap functions in the following format:printf ("format string\n", arguments)hello world, and contains no format specifiers.%s (for strings) and %d (for numbers) in format strings, depending on your list of arguments. Format strings can have multiple format specifiers, each matching a corresponding argument; multiple arguments are delimited by a comma (,).Note
Example 3.5. variables-in-printf-statements.stp
probe syscall.open{ printf ("%s(%d) open\n", execname(), pid())}open; for each event, it prints the current execname() (a string with the executable name) andpid() (the current process ID number), followed by the wordopen. A snippet of this probe's output would look like:vmware-guestd(2206) openhald(2360) openhald(2360) openhald(2360) opendf(3433) opendf(3433) opendf(3433) openhald(2360) open
printf () arguments. Example 3.5, “variables-in-printf-statements.stp”uses the SystemTap functions execname() (name of the process that called a kernel function/performed a system call) andpid() (current process ID).thread_indent() by the thread), a process name, and the thread ID. This allows you to identify what functions were called, who called them, and the duration of each function call. thread_indent(): Example 3.6. thread_indent.stp
probe kernel.function("*@net/socket.c").call{ printf ("%s -> %s\n", thread_indent(1), probefunc())}probe kernel.function("*@net/socket.c").return{ printf ("%s <- %s\n", thread_indent(-1), probefunc())}thread_indent() and probe functions at each event in the following format:0 ftp(7223): -> sys_socketcall1159 ftp(7223): -> sys_socket2173 ftp(7223): -> __sock_create2286 ftp(7223): -> sock_alloc_inode2737 ftp(7223): <- sock_alloc_inode3349 ftp(7223): -> sock_alloc3389 ftp(7223): <- sock_alloc3417 ftp(7223): <- __sock_create4117 ftp(7223): -> sock_create4160 ftp(7223): <- sock_create4301 ftp(7223): -> sock_map_fd4644 ftp(7223): -> sock_map_file4699 ftp(7223): <- sock_map_file4715 ftp(7223): <- sock_map_fd4732 ftp(7223): <- sys_socket4775 ftp(7223): <- sys_socketcall
thread_indent() call for the thread (included in the string from thread_indent()).thread_indent()).<-) or an exit (->); the indentations help you match specific function call entries with their corresponding exits.syscall.system_call. stap script -x process ID or stap script -c command. If you want to specify a script to take an argument of a process ID or command, use target() as the variable in the script to refer to it. For example: -x process ID, it watches all system calls (as specified by the event syscall.*) and prints out the name of all system calls made by the specified process. if (pid() == process ID) each time you wish to target a specific process. However, using target() makes it easier for you to re-use the script, giving you the ability to pass a process ID as an argument each time you wish to run the script (that is, stap targetexample.stp -x process ID). man stapfuncs.