Question

I want to know what executables a script launches and in what order (and trace those executables recursively).

For example, let's say I have a bash script here (called abc.sh):

#!/bin/bash
ls
gcc

I'd like to run this script with a "trace/log command" and get something like this:

abc.sh -- ls
      |-- gcc -- cpp
              -- cc1
              ... etc.

This show that abc.sh called ls, and gcc. gcc, in turn, called cpp and cc1.

Is this possible? How can I do it? A tree view like the above would be nice, but a simpler view would work as well.

Note that I do not want the current snapshot of the process tree. Rather, I want a trace or a log of the spawning processes. Timing annotation would also be useful.

Thanks!

Was it helpful?

Solution

You may try to analyse the output of strace command. Particularly, you'll be interested in something like

strace -f -tt -e trace=execve ./abc.sh

OTHER TIPS

You can use pstree command. It was conceived to show exactly what you are looking for: process tree (hence the name, pstree). It won't give you process tracing, but you could call it multiple times to get something similar to what you're looking fOr.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top