Como mencionado em uma das respostas à sua pergunta anterior, a chamada de família exec
acontece após a O processo filho é criado, portanto, se você quiser que ele apareça na saída strace
, você deverá fazê-lo também seguir os filhos do processo de shell que está rastreando.
Você pode fazer isso adicionando as opções -f
ou -ff
, aqui estão os snippets da página do manual relevantes:
-f Trace child processes as they are created by currently traced processes as a
result of the fork(2) system call.
-ff If the -o filename option is in effect, each processes trace is written to
filename.pid where pid is the numeric process id of each process. This is
incompatible with -c, since no per-process counts are kept.
Para rastrear as chamadas relevantes envolvidas na execução de um comando em bash
, você pode fazer:
strace -f -e trace=process bash -c 'ls; :'
O -e trace=process
rastreia especificamente todas as chamadas envolvidas no gerenciamento de processos. Também o segundo comando no-op ( :
) é necessário como se você executasse o bash com apenas um único comando, é inteligente o suficiente apenas fazer um execve
sem bifurcar já que ele sabe que não precisa fazer mais nada .