Estou executando este comando:
strace -f -e trace=desc ./my-program
(Então você vê que estou executando o -f
parâmetro)
O que me permite ver os write
comandos stdout/stderr do processo pai:
[pid 10] 07:36:46.668931 write(2, "..\n"..., 454 <unfinished ...>
<stdout of ..>
<stdout other output - but I don't see the write commands - so probably from a child process>
[pid 10] 07:36:46.669684 write(2, "My final output\n", 24 <unfinished ...>
<stdout of My final output>
O que eu quero ver são os outros comandos de gravação.
Isso está sendo executado em um contêiner docker sendo executado com:
docker run --privileged=true my-label/my-container
Minha pergunta é: como rastrear todas as chamadas de gravação (para stdout/stderr) de todos os processos filhos dentro de um contêiner docker?
EDIT: Observe que este aplicativo inicia e para em cerca de 2 segundos. strace
pode seguir seu ciclo de aplicação. Mas as ferramentas que esperam que ele permaneça como um processo de servidor não funcionarão. (Talvez sysdig
possa ser usado para isso - mas ainda não vi um exemplo desse modelo).
Acontece que
strace
trunca a saída da string - você deve dizer explicitamente que deseja mais do que os primeiros n (10?) caracteres da string. Você faz isso com-s 800
.Você também pode obter todos os
write
comandos perguntandostrace
explicitamente com-e write
.