Você pode usar o sistema de auditoria:
sudo auditctl -a exit,always -S execve -F ppid="$pid"
faria com que as entradas de auditoria fossem geradas sempre que um filho de $pid
executasse um comando. audit.log
teria coisas como:
type=SYSCALL msg=audit(1373986729.977:377): arch=c000003e syscall=59 success=yes exit=0 a0=7ff000e4b188 a1=7ff000e4b1b0 a2=7fff928d47e8 a3=7fff928caac0 items=2 ppid=7502 pid=691 auid=10031 uid=10031 gid=10031 euid=10031 suid=10031 fsuid=10031 egid=10031 sgid=10031 fsgid=10031 ses=1 tty=pts5 comm="echo" exe="/bin/echo" key=(null)
type=EXECVE msg=audit(1373986729.977:377): argc=2 a0="/bin/echo" a1="test"
type=CWD msg=audit(1373986729.977:377): cwd="/tmp"
type=PATH msg=audit(1373986729.977:377): item=0 name="/bin/echo" inode=131750 dev=fe:00 mode=0100755 ouid=0 ogid=0 rdev=00:00
Onde você pode encontrar o pid
entre outras coisas.
Se você estiver interessado em processos que não executam necessariamente algo, adicione regras de auditoria para as chamadas do sistema fork
e clone
.