I wanted to get a quick picture of what the processes on my computer were doing in the background, so I turned to DTrace (shout out to Julia Evans for getting me excited about it), which can tell me handy things like “who’s opening up which files?” and “what system calls are being made?”

Just to start, I decided to run this one-liner to see which programs were making the most system calls:

sudo dtrace -n 'syscall:::entry { @num[execname] = count(); }'

After running the above for a couple of minutes (and browsing idly in the background), I got this output (truncated for brevity):

Now, I want to reboot into a relatively clean state, and run the command for exactly ten minutes, without having to manually stop it. This is what I came up with:

Note the ampersand at the end of line 1

The ampersand makes DTrace run as a background job. Running jobs -p gives you back a list of the process IDs of jobs:

bash-3.2$ jobs -p

10038

I pipe that through tail -1 to take only the last one (in case you had other jobs running or suspended in the same shell instance). And then because kill doesn’t take input from stdin, we pipe the PID to xargs, which will pass its stdin as arguments to kill . And we make sure that we run kill with sudo , because that’s how the DTrace process was started.

By the way, because jobs is a bash builtin, if you want help with it you need to use help jobs , not man jobs .

Let me know if there’s a better way of doing this! I’m by no means a bash expert.