Monitorear continuamente archivos abiertos / accedidos por un proceso

Respuestas:

31

Tratar con strace -p 12345; debe hacer lo que intentas lograr.

La salida se puede filtrar para mostrar solo los archivos abiertos ( comentario de Dan D. ):

strace -e open -p 12345

Nota: también puede rastrear procesos que se ejecutan rápidamente con strace -e open <command>.

Jens Erat
fuente
La salida no es amigable y demasiadas cosas extra.
MA1
Puede arreglar eso canalizando - strace -p {pid} | grep -i "Open" | tee files_opened.log. La clave es grep, que le permite filtrar la salida para la llamada al sistema que desea (por ejemplo open()).
11
@Ninefingers En realidad stracepuede hacerlo mejor que grepcon la -eopción:strace -e open
Dan D.
@DanD oh yeah, ofc :)
Cuando elimino el comando strace, también mata lo que está rastreando. ¿Por qué está sucediendo esto (cygwin)?
CMCDragonkai
6

La nueva utilidad fatrace hará esto: https://launchpad.net/fatrace/

sudo fatrace | grep '(6514)'

No use la opción -p, significa lo contrario de lo que significa en lsof u otras utilidades.

Bryce
fuente
3

Esto repetirá nuevamente su comando y borrará la pantalla cada vez:

watch "lsof -p 12345"

ADVERTENCIA: esto perderá accesos rápidos a archivos y solo es adecuado para ver archivos de larga data

jcalfee314
fuente
2
Esto es algo torpe en comparación con la otra respuesta que usa strace.
David Foerster
1
Esa es una solución inexacta: un proceso puede usar archivos entre ejecuciones delsof
Dor
@Dor puede configurar el tiempo de lsof en sub 1 segundo y aumentar su precisión. Si bien es torpe en comparación con otros, está equivocado porque es una solución inexacta.
Jordon Bedwell
Si está buscando una operación de archivo largo (como una copia de seguridad de la base de datos), esta puede ser una buena alternativa simple.
jcalfee314