Watch every exec() call on your Linux system β in real time, with process trees, exit timing, and user context. No eBPF. No ptrace. No kernel modules.
$ sudo proc-trace-exec -t make 91100+ make 91101+ gcc -O2 -c src/main.c -o src/main.o 91102+ gcc -O2 -c src/util.c -o src/util.o 91103+ ld -o output src/main.o src/util.o 91103- ld exited status=0 time=0.042s 91102- gcc exited status=0 time=0.118s 91101- gcc exited status=0 time=0.134s 91100- make exited status=0 time=0.201s
Indented output shows exact parentβchild relationships. See who spawned what, however deep the hierarchy goes.
The -t flag shows exit status and wall-clock runtime for every process. Instantly spot which subprocess is the bottleneck.
Catches every exec() on the machine, not just children of your shell. One socket, full visibility.
Use -p PID[,PID,...] to watch only descendants of specific processes, or pass CMD... to trace a single command's subtree.
ANSI colors auto-detected when stdout is a tty. PIDs in amber, commands in cyan, exit markers in green/red, timing in blue.
Single static binary. Uses the kernel's proc connector via a netlink socket β no eBPF, no ptrace, no kernel modules, no root privileges if CAP_NET_ADMIN is granted.
When a build takes 3 minutes, which subprocess is the bottleneck? When an install script runs, what does it actually exec? When your app forks children, are they the processes you expect?
Existing tools are painful: strace -e execve -f is extremely verbose and affects performance. auditd is complex to configure and requires daemon setup. eBPF requires kernel 5.8+ and root. ps polling misses short-lived processes entirely.
proc-trace-exec answers these questions with one command and one static binary β subscribing to the kernel's own process event stream rather than intercepting syscalls.
See every subprocess cmake, make, gradle, or bazel spawns. Find the slow step. Understand the full dependency graph.
Watch what an installer script, package, or binary does before you trust it. Does it exec curl? wget? chmod? You'll see everything.
Trace every subprocess spawned by apt, yum, pip, or npm during install. Understand what pre/post-install scripts actually do.
Find the exact command silently failing. Unlike set -x, this catches exec'd subshells that don't inherit xtrace.
Count process spawns in hot paths. Identify fork bombs early. See which step in your pipeline is spawning hundreds of subprocesses.
Understand how programs work by watching what they exec. A great way to explore unfamiliar systems, CI environments, or new software.