Você pode querer olhar execsnoop (assumindo que seu kernel foi configurado com CONFIG_FTRACE, que geralmente é o caso). Este é um dos muitos scripts da coleção de rastreamento e desempenho Brendan Gregg. Sem args, mostra todos os comandos quando eles iniciam no sistema, ou você pode dar um regexp para assistir.
Por exemplo, para procurar comandos que qualquer zsh
existente ou novo possa estar iniciando, faça:
sudo /opt/perf-tools-master/bin/execsnoop zsh
Mostra-me esta saída quando inicio um novo zsh:
Tracing exec()s issued by process name "zsh". Ctrl-C to end.
Instrumenting sys_execve
PID PPID ARGS
21920 21919 /usr/libexec/grepconf.sh -c
21923 21922 /usr/bin/tty -s
21922 21919 /usr/bin/tput colors
21924 21919 /usr/bin/dircolors --sh /etc/DIR_COLORS.256color
21925 21919 /usr/bin/grep -qi ^COLOR.*none /etc/DIR_COLORS.256color
21926 21919 /usr/libexec/grepconf.sh -c
21928 21919 /usr/libexec/grepconf.sh -c
21930 21919 uname -m
21932 21919 /bin/grep -q /usr/lib64/qt-3.3/bin
21934 21933 /usr/bin/id -u
Depois que você souber o nome completo do programa que está sendo executado, normalmente você deve substituir esse arquivo por um script que execute o programa original depois de adicionar seus ganchos. Se você não puder fazer isso, poderá usar algo como fanotify(7)
para que seu programa de rastreamento interfira antes que todos os arquivos abertos tenham permissão para serem concluídos. Ou talvez inotifywatch
seja rápido o suficiente para você anexar um strace
ao processo.