miércoles, 16 de septiembre de 2009

Despiste 3: Detectar los procesos que acceden a un fichero

¿A quién no le ha pasado alguna vez eso de tener que borrar un fichero y no poder porque hay algún otro proceso que lo tiene abierto?.
Si eres un administrador de Unix la solución es fácil, haces un fuser sobre el fichero/directorio/partición en cuestión y obtienes el PID del proceso que te está haciendo la pascua.
Si de lo que hablamos es de un sistema Windows (para la versión 2000), la cosa cambia un poco, ya que no existe una herramienta en el propio sistema que nos permita obtener el deseado PID. Pero una cosa es que el sistema no cuente con una herramienta que nos resuelva el problema y otra muy distinta es que no exista ninguna herramienta que nos aporte la deseada solución. En este caso la herramienta salvadora forma parte de la suite de herramientas de sysinternals, handle. Este comando, que toma como uno de sus parámetros, el nombre del fichero que tenemos bloqueado, nos informa acerca de todos los handlers (descriptores de fichero) que tiene abierto el sistema y nos dá, entre otras cosas, el PID del proceso que hace uso del descriptor de fichero. Ahora sólo queda optar por una de las dos siguientes opciones:
  1. Irse al task manager, localizar el PID que nos interesa y parar el proceso (eso de matar nunca me ha gustado :))
  2. Usar el propio comando handle con el parámetro -c , es decir: handle -c 237. Si esta opción es la que más os gusta, tened cuidado con el proceso que parais, vaya a ser que topeis con uno gordo del sistema. Aquí teneis un listado de los procesos por defecto del sistema.
Este procedimiento es válido para todos los Windows a partir de 2000. A partir de XP se ha introducido el comando openfiles que muestra y desconecta los ficheros abierto en el sistema. La principal ventaja sobre handle es que también permite la desconexión de ficheros abierto en sistemas remotos.

No hay comentarios:

Publicar un comentario