No puedo cerrar el administrador de tareas… y está parpadeando todo el rato.

Este es un bug que tiene tanto Windows Vista como Windows 7, y que afecta sobretodo si tienes configurado el administrado rde tareas para que se oculte al estar minimizado:

Si intentas mostrar el administrador de tareas mientras el equipo está muy ocupado, y al no aparecer intentas por segunda vez ejecutar el administrador de tareas, lo que consigues es que cuando el equipo vuelve a responder, se ejecuten dos (o más) instancias del administrador de tareas, que se ponen a pelearse para ver quién ocupa el icono del área de notificación. Como resultado, vemos el cuadradito verde del área de notificación parpadeando como si pasara del 0 al 100% rápidamente, y no podemos restaurarlo ni cerrarlo, incluso puede que se quede el menú contextual del icono del área de notificación colgado sin responder.

Esta situación es comprometida, ya que si tienes el administrador de tareas configurado en «ocultar al minimizar» no puedes cerrarlo ya que no puedes usarlo… ¿o si?

La solución al problema la encontramos en la utilidad de línea de comandos que viene de serie con Windows llamada TaskKill.exe.

Esta utilidad permite finalizar una tarea des de la línea de comandos. En el caso que nos ocupa, para arreglar el problema con los administradores de tareas, tenemos que seguir los siguientes pasos:

  • Abrir una línea de comandos pulsando sobre el botón de inicio y escribiendo CMD y pulsando enter.
  • En la ventana de la línea de comandos escribimos TASKKILL /IM TASKMGR.EXE y pulsamos enter de nuevo.

Automáticamente uno de los administradores de tareas se cerrará y hará que el otro funcione correctamente. Si aún no se ha solucionado, podemos repetir el segundo paso hasta que se solucione.

Y para los que quieran saber más, a continuación dejo un par de notas técnicas (muy técnicas):

Este problema también ocurre en Windows XP; pero en ese caso lo que ocurre es que se crean múltiples iconos en el área de notificación (uno por cada instancia), pero en este caso se pueden cerrar sin ningún problema, ya que cada instancia responde correctamente a su icono del área de notificación correspondiente.

La razón de porqué ocurre esto, es por la forma en que una aplicación detecta si ya se está ejecutando. Para ello, debemos saber qué es un semáforo:

Un semáforo es una variable global del sistema operativo, que una vez establecida seguirá existiendo hasta que sea liberada o hasta que el proceso que la ha creado se termine.

El comportamiento habitual de una aplicación de la que sólo se quiere o debe tener una instancia en ejecución, es el siguiente: Cuando se inicia se comprueba si existe un semáforo con un nombre concreto. Si el semáforo existe, la aplicación se termina; si no existe, se crea inmediatamente para que si se intenta iniciar otra instancia de la misma aplicación se detecte el semáforo y no permita continuar iniciando.

El problema ocurre cuando el equipo está muy ocupado (todos los núcleos de la CPU al 100%) y el sistema operativo carga la aplicación, pero la ejecuta tan despacio, que da tiempo a volver a iniciarla antes de que se cree el semáforo. Hay que tener en cuenta que no se genera ninguna excepción si se crea un semáforo con un nombre que ya existía.

Y si dominas de estos temas, te estarás preguntando… ¿cómo puede ser que no le de tiempo a ejecutar las primeras líneas de código de la aplicación y si le de tiempo a cargarla de nuevo? La respuesta es que en los sistemas operativos modernos, cuando ejecutamos una aplicación (o cargamos una biblioteca), lo primero que se hace es comprobar si ya se ha ejecutado anteriormente; en ese caso no volverá a cargar desde disco y a la memoria; sino que aprovechará el espacio en memoria que ya ocupa, y creará un nuevo espacio para sus necesidades de memoria de ejecución. De esta forma, si el código de una aplicación ocupa 5Mb, y necesita 2Mb de memoria para su funcionamiento, si lo cargamos dos veces no necesita 5+2+5+2=14Mb; sino que sólo necesita 5+2+2=9Mb; ahorrando memoria y mejorando la velocidad de trabajo del sistema. Esta mejora de velocidad al iniciar la segunda y sucesivas veces es la que permite que ocurra el bug de que una aplicación se ejecute varias veces aún cuando hay código para comprobar que eso no ocurra.

Este problema se podría solucionar de varias formas; los ejecutables podrían tener una señal que indicara al sistema operativo que ese binario no se puede ejecutar más de una vez; o se podría generar una excepción si se intenta crear un semáforo con un nombre que ya existe; sea como sea el caso del administrador de tareas es como mucho molesto; pero se de varios casos en los que si falla la comprobación de que sólo se está ejecutando una instancia de un proceso, podría tener consecuencias catastróficas.

2 comentarios

  1. Tengo un problema con al administrador de tarea, que n me aparece las barras de herramientas y n puedo cerrarlo desde la aplicacion. que puedo hacer?

Dejar un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.