2010-09-08 15 views
7

Tengo un archivo y una gran cantidad de proceso (y subprocesos de proceso) están accediendo a él.¿Cómo controlar qué procesos acceden a un archivo en particular en Unix?

Quiero supervisar el archivo para obtener una lista de todos los procesos que intentaron acceder al archivo. Ser capaz de registrar las marcas de tiempo también sería excelente para fines de registro, aunque puedo prescindir de él.

  • ¿Hay alguna utilidad Unix que haga algo similar?

  • En caso de que no exista tal utilidad, ¿cómo debería programar esto usando una secuencia de comandos (shell, Perl) o un programa (C, C++)?

+2

Probablemente no exista una forma genérica de Unix de hacer esto. Por ejemplo, Linux ha inotify (ver la respuesta de Carlos) pero inotify solo existe en Linux. Otras variedades de Unix tienen diferentes métodos. – JeremyP

Respuesta

6

creo que la funcionalidad básica que estás buscando es en el comando UNIX fuser.

Esto le dirá qué procesos están usando un archivo (o puerto si lo desea).

+0

Aunque es cierto que no hace un informe basado en el tiempo, pero debería ser lo suficientemente fácil como para construir sobre esto para crear lo que necesita – lucas1000001

1

Es posible que desee consultar lsof.

+1

Un programa podría haberlo abierto y lo cerró cuando ejecuto 'lsof'. En este caso, no se registraría con 'lsof'. Necesito una forma de monitorear continuamente el archivo para que cada vez que se acceda por algún proceso, un disparador registre el acceso a un archivo de registro. – Lazer

9

En Linux, inotify puede ser lo que estás buscando.

+0

¡En segundo lugar! inotify también le permite agregar ganchos que se ejecutan en ciertos momentos: cuando se accede a un archivo, se escribe en, se agrega, etc. Lo usé hace algún tiempo para automáticamente procesar archivos de commit modificados en un directorio cuando cambiaban o eran eliminados – mfontani

Cuestiones relacionadas