
Tengo salida capturada por el siguiente comando:
strace -f -e trace=process,socketpair,open,close,dup,dup2,read,write -o rsync.log rsync -avcz --progress src/ dst/
es un poco largo así que lo he subidoaquí. Entiendo el formato básico de strace
salida, por ejemplo la siguiente línea:
1399 open("/lib/x86_64-linux-gnu/libpopt.so.0", O_RDONLY|O_CLOEXEC) = 3
Significa que:
1399
es el PID del procesoopen(const char *pathname, int flags);
es una llamada al sistema con argumentos particulares (tomado deman 2 open
)3
es el valor de retorno, un descriptor de archivo en este caso particular (tomado deman 2 open
)
De acuerdo aestehilo:
rsync
genera dos procesos/hilos para hacer la copia, y hay un flujo de datos entre los procesos y otro desde el proceso receptor al archivo de destino.Usar algo así
strace -e trace=process,socketpair,open,read,write
mostraría algunos subprocesos generados, el par de sockets que se crea entre ellos y diferentes subprocesos que abren los archivos de entrada y salida.
¿Puedo de alguna manera analizar strace
el resultado para poder confirmar las declaraciones del hilo mencionado y ver qué sucede bajo el capó, incluso si no estoy muy familiarizado con la comunicación entre procesos? Estoy especialmente interesado en el paso de datos entre procesos/hilos (¿cuántos datos se pasaron del proceso1 al proceso2? ¿Dónde escribió el proceso2 los datos recibidos?)
También he visto líneas como ésta en el registro pero no sé cómo interpretarlas correctamente:
1399 <... close resumed> ) = 0
1400 <... dup2 resumed> ) = 0
Respuesta1
Recomiendo usar
-y
flag forstrace
, imprimirá rutas asociadas con los argumentos del descriptor de archivo.-e
es calificador paratrace
, es posible que desee perder las llamadas al sistema.
Creo que es mejor generar todas las llamadas y señales del sistema sin calificar, luego puedes usarlas grep
para filtrar la información que deseas, como se muestra a continuación:
grep -E 'dup2\(|clone\(|execve\(|\(open|write|close|openat|F_DUPFD|exit_group' trace.log