Ver qué proceso está usando un archivo en Mac OS X

93

Me gustaría poder rastrear un archivo y ver qué proceso está tocando ese archivo. ¿Es eso posible? Sé que puedo ver la lista de procesos abiertos en el monitor de actividad, pero creo que está sucediendo muy rápido para que pueda verlo. La razón de esto es que estoy usando un marco y creo que se está usando la versión del sistema del marco en lugar de la versión de depuración y me gustaría ver qué proceso lo está tocando.

JPC
fuente
1
esta es una pregunta de uso mejor formulada en Superusuario
Michael Dautermann
NOTA: ^^^ ES UNA PREGUNTA MUY RELEVANTE, similar - FYI ;-)
Brad Parks

Respuestas:

90

lsof mostrará una lista de los archivos abiertos, pero puede ser un poco incómodo para los toques momentáneos (por ejemplo, si el archivo no está abierto cuando se ejecuta lsof, no se muestra).

Creo que su mejor apuesta sería fseventer.app de fernLightning . Es "nagware" y le permite ver (gráficamente) la API de fsevents en tiempo real.

Shaun
fuente
39
lsof | grep myfilenametrabajó para mi. Tengo un archivo PDF en mi Papelera que el sistema afirma que está en uso. Extrañamente lsofafirma que está en uso, Previewpero Previewparece que no se está ejecutando (por ejemplo, cuando presiono la pestaña de comando a través de las aplicaciones en ejecución) pero Activity Monitormuestra que se está ejecutando. Vista previa estúpida.
Dave Sag
Esto es perfecto para archivos transitorios (es decir, archivos que no se mantienen abiertos pero que solo se tocan mientras se guardan).
Jeronimo Colon III
Hoy tuve un problema similar con un archivo en mi Papelera retenido por un proceso de Vista previa zombie. Abrir Vista previa y salir de nuevo me resolvió el problema. Creo que Preview mantiene los archivos con regularidad, aunque se ha cerrado. A menudo abro imágenes de Evernote en Vista previa para recortarlas, y la mayoría de las veces, la mayoría de las veces, incluso después de salir de Vista previa, Evernote dice que la imagen todavía está abierta en otra aplicación.
Vihung
Esto parece similar a un problema que estoy teniendo en este momento, todavía sin solución. Descargué un archivo usando Chrome, luego lo moví usando Finder a otra carpeta. Apareció en gris, así que usé lsof para averiguar quién tenía el archivo abierto: Finder. Intenté forzar la salida de Finder (que lo reinicia automáticamente). Eso no funcionó. Intenté cerrar mi computadora portátil, pensando que eso pondría todo en reposo y, con suerte, solucionaría el problema. Eso tampoco funcionó. lsof continúa mostrando a Finder como el culpable y continúa apareciendo en gris en la interfaz de usuario.
Victor Engel
1
Curiosamente, cerrar las ventanas del buscador pareció resolver el problema. Sin embargo, si abría una nueva ventana del buscador y navegaba a la misma carpeta, el problema persistía. Resolví el problema arrastrando el archivo errante a la papelera (produciendo una advertencia de que podría haber efectos adversos en el programa que tiene el archivo abierto), luego volví a copiar el archivo.
Victor Engel
94

Así de simple: sudo fs_usage | grep [path_to_file]

spaceboy.cz
fuente
10
Esta es, con mucho, la mejor respuesta aquí.
NuSkooler
fs_usage debe ejecutarse como root ... no es la mejor solución.
bontoJR
¿Esto muestra eventos fs? Si un proceso tiene un archivo abierto pero no hace nada con él, no aparece nada aquí. O al menos parecía ser mi experiencia. sudo fs_usage | grep musiclibraryno mostró nada, pero sudo lsof | grep musiclibrarymostró 3 procesos accediendo a los archivos de la base de datos de mi biblioteca de música.
gman
43

Pero pasé 2 minutos buscando en Google y encontré tu respuesta aquí .

$ lsof | grep [lo que sea]

Donde [lo que sea] se reemplaza con el nombre de archivo que está buscando. Con esto, puede ver qué programa se está aferrando desesperadamente a su archivo a punto de ser destruido. Una vez que salga de ese programa, su papelera se vaciará.

Michael Dautermann
fuente
1
El problema con eso es que tengo que intentar escribir lsof muy rápido. podría ser solo transitorio
JPC
13
lsof -r pone a lsof en modo de repetición
stoutyhk
Tiene sentido grep en caso de que el archivo haya sido liberado.
Ray Hunter
16

La forma más rápida es:

$ lsof [path_to_file]

Esta solución no requiere la contraseña de root y le devuelve el siguiente resultado claro:

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
Finder     497  JR7   21r   REG    1,2   246223 33241712 image.jpg
QuickLook 1007  JR7  txt    REG    1,2   246223 33241712 image.jpg
bontoJR
fuente
15

Otra opción es Sloth . Es una GUI gratuita de código abierto para LSOF que otros han mencionado.

cabalgada
fuente
1
¡Vaya, esta es una herramienta realmente genial, gracias por compartir! Funcionó perfecto para encontrar un proceso del que perdí la pista.
RayB
2
Tiendo a preferir las soluciones de línea de comandos porque son más portátiles, ¡pero debo admitir que esta es una herramienta muy buena! Gracias por la sugerencia.
Formulario