
Eu tenho a saída capturada pelo seguinte comando:
strace -f -e trace=process,socketpair,open,close,dup,dup2,read,write -o rsync.log rsync -avcz --progress src/ dst/
é um pouco longo, então eu carregueiaqui. Entendo o formato básico de strace
saída, por exemplo, a seguinte linha:
1399 open("/lib/x86_64-linux-gnu/libpopt.so.0", O_RDONLY|O_CLOEXEC) = 3
Significa que:
1399
é PID do processoopen(const char *pathname, int flags);
é uma chamada de sistema com argumentos específicos (retirados deman 2 open
)3
é o valor de retorno, um descritor de arquivo neste caso específico (retirado deman 2 open
)
De acordo comessefio:
rsync
gera dois processos/threads para fazer a cópia, e há um fluxo de dados entre os processos e outro do processo de recebimento para o arquivo de destino.Usar algo como
strace -e trace=process,socketpair,open,read,write
mostraria alguns threads gerados, o par de soquetes sendo criado entre eles e diferentes threads abrindo os arquivos de entrada e saída.
Posso de alguma forma analisar strace
a saída para poder confirmar as declarações do thread mencionado e ver o que acontece nos bastidores, mesmo que não esteja muito familiarizado com a comunicação entre processos? Estou especialmente interessado na passagem de dados entre processos/threads (quantos dados foram passados do processo1 para o processo2? onde o processo2 gravou os dados recebidos?)
Também vi linhas como esta no log mas não sei como interpretá-las corretamente:
1399 <... close resumed> ) = 0
1400 <... dup2 resumed> ) = 0
Responder1
Eu recomendo usar
-y
flag forstrace
, ele imprimirá caminhos associados aos argumentos do descritor de arquivo.-e
é qualificador paratrace
, pode ser que você queira perder syscalls.
Acho melhor emitir todas as chamadas e sinais do sistema sem qualificação, então você pode usar grep
para filtrar as informações que deseja, exemplo abaixo:
grep -E 'dup2\(|clone\(|execve\(|\(open|write|close|openat|F_DUPFD|exit_group' trace.log