#! /usr/bin/env stap /* * Copyright (C) 2014, 2016 Red Hat Inc. * * This copyrighted material is made available to anyone wishing to use, * modify, copy, or redistribute it subject to the terms and conditions * of the GNU General Public License v.2. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Print out all calls to fork(), exec(), exit(), init_module(), and * delete_module(). This script does not require debuginfo. * * Format is: * timestamp: EVENT: ( pid) * * 2.843626: FORK: ( 410) firewalld: pid 868 * 2.843831: EXEC: ( 868) firewalld: file /sbin/iptables * 2.844514: EXIT: ( 868) iptables: exit code 0 * 2.844829: FORK: ( 410) firewalld: pid 869 * 2.845034: EXEC: ( 869) firewalld: file /sbin/iptables * 2.845722: EXIT: ( 869) iptables: exit code 0 * 2.846036: FORK: ( 410) firewalld: pid 870 * 2.846240: EXEC: ( 870) firewalld: file /sbin/iptables * */ function print_time() { timer = read_stopwatch_us("timer") printf("%4d.%.6d: ", timer/1000000, timer%1000000) } probe begin { start_stopwatch("timer") printf(" 0.000000: Started procmod_watcher on %s\n", ctime(gettimeofday_s())) } probe nd_syscall.execve { print_time() printf("EXEC: (%4d) %s: file %s\n", pid(), execname(), argstr) } probe nd_syscall.fork.return ?, nd_syscall.clone.return ? { print_time() printf("FORK: (%4d) %s: pid %s\n", pid(), execname(), retstr) } probe nd_syscall.exit, nd_syscall.exit_group { print_time() sig = status & 0x7F code = sig ? sig : status >> 8 printf("EXIT: (%4d) %s: %s %d\n", pid(), execname(), sig ? "signal" : "exit code", code) } probe kernel.trace("module_load") { print_time() printf("LOAD: (%4d) %s: module %s", pid(), execname(), kernel_string(@cast($mod, "struct module", "kernel")->name)) args = kernel_string(@cast($mod, "struct module", "kernel")->args) if (args != "") printf(" with args \"%s\"", args) println("") } probe nd_syscall.delete_module { print_time() printf("UNLD: (%4d) %s: module %s with flags 0x%x\n", pid(), execname(), name_user, flags); } probe end { print_time() printf("Exiting procmod_watcher on %s\n", ctime(gettimeofday_s())) }