Connect with us

cómo

Cómo acabar con los procesos zombies en Linux

Published

on

Cómo matar procesos zombies en Linux

Los programas que están mal escritos o que funcionan mal pueden dejar procesos zombis al acecho dentro de su computadora Linux. Descubra cómo se crean los zombis y cómo finalmente puede dejarlos descansar.

Cómo funcionan los estados de proceso en Linux

Linux, por supuesto, tiene que realizar un seguimiento de todas las aplicaciones y demonios que se ejecutan en su computadora. Una de las formas en que lo hace es manteniendo la tabla de procesos. Esta es una lista de estructuras en la memoria del kernel. Cada proceso tiene una entrada en esta lista que contiene información al respecto.

No hay mucho en cada una de las estructuras de la tabla de procesos. Contienen la identificación del proceso, algunos otros elementos de datos y un puntero al bloque de control de proceso (PCB) para ese proceso.

Es el PCB que contiene los muchos detalles que Linux necesita buscar o configurar para cada proceso. La PCB también se actualiza a medida que se crea un proceso, se le da tiempo de procesamiento y finalmente se destruye.

La PCB de Linux contiene más de 95 campos. Se define como una estructura llamada task_struct.h , y tiene más de 700 líneas de largo. La PCB contiene los siguientes tipos de información:

  • Estado del proceso: los estados se describen a continuación.
  • Número de proceso: su identificador único dentro del sistema operativo.
  • Contador de programa: la próxima vez que se le dé acceso a la CPU a este proceso, el sistema utilizará esta dirección para encontrar la siguiente instrucción del proceso que debe ejecutarse.
  • Registros: la lista de registros de CPU utilizados por este proceso. La lista puede contener acumuladores, registros de índice y apuntadores de pila.
  • Abrir lista de archivos: archivos asociados con este proceso.
  • Información de programación de la CPU: se utiliza para determinar la frecuencia y la duración del tiempo de procesamiento de la CPU para este proceso. La prioridad del proceso, los indicadores de las colas de programación y otros parámetros de programación deben registrarse en la PCB.
  • Información de administración de memoria: detalles sobre la memoria que utiliza este proceso, como las direcciones de inicio y finalización de la memoria del proceso y los indicadores de las páginas de la memoria.
  • Información de estado de E / S: cualquier dispositivo de entrada o salida utilizado por el proceso.

El “Estado del proceso” puede ser cualquiera de los siguientes:

  • R: Un proceso en ejecución o ejecutable. Ejecutando significa que está recibiendo ciclos de CPU y ejecutándose. Un proceso ejecutable está listo para ejecutarse y esperando una ranura de CPU.
  • S: Un proceso de dormir. El proceso está esperando que se complete una acción, como una operación de entrada o salida, o que un recurso esté disponible.
  • D: El proceso se encuentra en un estado de suspensión ininterrumpida. Está usando una llamada al sistema de bloqueo y no puede continuar hasta que se hayan completado las llamadas al sistema. A diferencia del estado de “suspensión”, un proceso en este estado no responderá a las señales hasta que se complete la llamada al sistema y la ejecución haya regresado al proceso.
  • T: El proceso ha terminado (detenido) porque recibió la señal SIGSTOP. Solo responderá a las señales SIGKILL o SIGCONT, que terminan el proceso o le indican que continúe, respectivamente. Esto es lo que sucede cuando cambia de las tareas de primer plano (fg) a segundo plano (bg).
  • Z: un proceso Zombie. Cuando se completa un proceso, no desaparece simplemente. Libera cualquier memoria que esté usando y se elimina a sí mismo de la memoria, pero su entrada en la tabla de procesos y en la PCB permanecen. Su estado se establece en EXIT_ZOMBIE y se notifica a su proceso padre (mediante la señal SIGCHLD) que el proceso hijo ha finalizado.

En el estado Zombie, el proceso padre llama a una de las familias de funciones wait() cuando se crea el proceso hijo. Luego espera un cambio de estado en el proceso hijo. ¿Se ha detenido, continuado o interrumpido el proceso del niño por una señal? ¿Ha terminado ejecutando la finalización natural de su código?

Si el cambio de estado es uno que significa que el proceso hijo ha dejado de ejecutarse, se lee su código de salida. Luego, la PCB del niño se destruye y se elimina su entrada en la tabla de proceso. Idealmente, todo esto sucede en un abrir y cerrar de ojos, y los procesos en el estado zombie no existen por mucho tiempo.

¿Qué causa los procesos zombies en Linux?

Un proceso padre mal escrito podría no llamar a la función wait() cuando se crea el proceso hijo. Esto significa que nada está pendiente de los cambios de estado en el proceso hijo y se ignorará la señal SIGCHLD . O quizás otra aplicación esté afectando la ejecución del proceso principal, ya sea debido a una programación deficiente o una intención maliciosa.

Sin embargo, si el proceso principal no está atento a los cambios de estado en el proceso secundario, no se producirá el mantenimiento adecuado del sistema. La PCB y la entrada en la tabla de procesos no se eliminarán cuando finalice el proceso hijo. Esto da como resultado que el estado zombi nunca se elimine de la PCB.

Los zombis usan un poco de memoria, pero generalmente no representan un problema. La entrada en la tabla de procesos es pequeña, pero, hasta que se publique, el ID de proceso no se puede reutilizar. En un sistema operativo de 64 bits, es poco probable que esto cause problemas porque la PCB es mucho más grande que la entrada de la tabla de procesos.

Una gran cantidad de zombis podría, posiblemente, afectar la cantidad de memoria que queda libre para otros procesos. Sin embargo, si tienes tantos zombis, tienes un problema grave con la aplicación principal o un error del sistema operativo.

Cómo eliminar procesos Zombie

No puedes matar un proceso zombie porque ya está muerto. No responderá a ninguna señal porque se ha eliminado de la memoria; no hay ningún lugar para enviar una señal SIGKILL . Puede intentar enviar la señal SIGCHLD al proceso principal, pero si no funcionó cuando el proceso secundario terminó, es poco probable que funcione ahora.

La única solución confiable es eliminar el proceso principal. Cuando se termina, sus procesos secundarios son heredados por el proceso init , que es el primer proceso que se ejecuta en un sistema Linux (su ID de proceso es 1).

El proceso init realiza regularmente la limpieza necesaria de zombis, por lo que para matarlos, solo tienes que matar el proceso que los creó. El comando top es una forma conveniente de ver si tienes zombis.

Escriba lo siguiente:

Este sistema tiene ocho procesos zombies. Podemos egrep usando el comando ps y egrep a egrep . Una vez más, los procesos zombies tienen una bandera de estado de “Z” y, por lo general, también verá “extinto”.

Escriba lo siguiente:

Se enumeran los procesos zombies.

Esta es una forma más ordenada de descubrir los ID de proceso de los zombies que desplazarse hacia adelante y hacia atrás en la top . También vemos que una aplicación llamada “badprg” generó estos zombies.

El ID de proceso del primer zombi es 7641, pero necesitamos encontrar el ID de proceso de su proceso padre. Podemos hacerlo usando ps nuevamente. Usaremos la opción de salida ( -o ) para decirle a ps que muestre solo el ID de proceso del padre, y luego lo pasaremos con el ppid= .

El proceso que queremos encontrar se indicará usando la opción -p (proceso) y luego pasando el ID de proceso del zombi.

Por lo tanto, escribimos el siguiente comando para buscar la información del proceso para el proceso 7641, pero solo informará el ID del proceso principal:

Nos dijeron que el ID del proceso principal es 7636. Ahora podemos hacer una referencia cruzada usando ps una vez más.

Vemos que esto coincide con el nombre del proceso principal anterior. Para matar el proceso principal, use la opción SIGKILL con el comando kill de la siguiente manera:

Dependiendo del propietario del proceso principal, es posible que también deba usar sudo .

Los zombis no dan miedo …

… A menos que estén en una horda masiva. Algunos no son motivo de preocupación y un simple reinicio los eliminará.

Sin embargo, si nota que una aplicación o un proceso siempre genera zombis, eso es algo que debería analizar. Lo más probable es que sea solo un programa escrito de manera descuidada, en cuyo caso, quizás haya una versión actualizada que se limpie adecuadamente después de sus procesos secundarios.

Advertisement

cómo

Cómo activar o desactivar subtítulos y subtítulos en Netflix

Published

on

By

Cómo activar o desactivar subtítulos y subtítulos en Netflix

Al transmitir en Netflix, es útil ver subtítulos o subtítulos en la película o programa de televisión. En lugar de asumir lo que dicen los personajes, puede leer su texto real debajo de la pantalla. Los subtítulos cerrados son el texto del audio que escuchas, incluidos los diálogos y los efectos de sonido. Los subtítulos son las traducciones directas a otro idioma.

Sin embargo, no todas las personas aprecian tener subtítulos o subtítulos mientras ven sus programas favoritos. Estos textos parecen molestos y solo bloquearían su vista de la imagen. Si no desea los subtítulos o la función de subtítulos ocultos, puede desactivarla fácilmente. También puede volver a encenderlo en cualquier momento que desee.

Habilitar o deshabilitar los subtítulos ocultos y los subtítulos al transmitir en Netflix

Los usuarios tienen la opción de habilitar o deshabilitar los subtítulos ocultos y los subtítulos en su aplicación de Netflix. Ya sea que transmita en su dispositivo móvil, su computadora o su televisor inteligente, puede encender o apagar la función fácilmente. Consulte nuestra guía a continuación sobre cómo hacerlo según su dispositivo de transmisión.

A través del navegador web

  • Inicie el sitio web de Netflix en cualquier navegador.
  • Seleccione el título que desea transmitir.
  • En la pantalla, mueva el mouse o haga clic en cualquier lugar.
  • Seleccione el icono de diálogo.
  • Haga clic en Desactivado o en cualquier idioma que desee como subtítulo.

A través de Apple TV

  • Abra la aplicación Netflix en su Apple TV y seleccione cualquier película o episodio.
  • Con el control remoto de tu Apple TV 2 o 3, mantén presionado el botón central. En el control remoto Apple TV 4 y Apple TV 4K, deslícelo hacia abajo.
  • Seleccione el icono de diálogo.
  • Elija cualquier idioma o Desactivado.

A través de dispositivo Android / iOS

  • En la aplicación Netflix para teléfonos Android o iOS, reproduce cualquier contenido.
  • Toque la pantalla y seleccione el icono de diálogo.
  • Elija cualquier idioma o toque Desactivado.

A través de Roku TV o dispositivo de transmisión

  • Reproduce cualquier título en tu aplicación de Netflix para Roku.
  • Presione su control remoto hacia arriba o hacia abajo.
  • Seleccione Audio y subtítulos.
  • Elija si desea desactivarlo o el idioma que desee.

A través de la consola PlayStation 4

  • Elija cualquier película o episodio en Netflix para PS4.
  • En su controlador, presione el botón Abajo.
  • Haga clic en el icono de diálogo.
  • Seleccione Desactivado o cualquier idioma.

A través de la consola Xbox One

  • Mientras reproduce cualquier título en Netflix para Xbox, mantenga presionado el botón Abajo en su controlador.
  • Haga clic en el icono de diálogo.
  • Seleccione Desactivado o el idioma que desee.

A través de Google Chromecast

  • Seleccione cualquier contenido para reproducir en su dispositivo Chromecast.
  • Toque la pantalla y coloque el cursor sobre el icono de diálogo.
  • Haga clic en Desactivado o en cualquier idioma que desee.

¿Qué dispositivo usas para transmitir Netflix? Puede compartir su historia con nosotros en los comentarios a continuación.

Continue Reading

cómo

Cómo crear una extensión de Chrome en 10 minutos planos

Published

on

By

Cómo crear una extensión de Chrome en 10 minutos planos

Una de mis cosas favoritas del navegador web Chrome es lo extensible que es. Parece que hay un complemento de Chrome para casi todo lo que pueda desear.

Pero, ¿alguna vez has querido crear tu propia extensión de Chrome? ¿Alguna vez te has preguntado qué tan difícil sería el proceso o qué implicaría? Bueno, resulta que es muy fácil, probablemente mucho más fácil de lo que jamás imaginó.

En este tutorial, le mostraré cómo crear una extensión básica de Chrome en aproximadamente 5 minutos, ¡no es broma!

Que vamos a construir

Estoy bastante obsesionado con la velocidad de mi sitio web, http://simpleprogrammer.com, por lo que suelo utilizar sitios como GTmetrix para comprobar la velocidad de mi sitio, solo para asegurarme de que no se ralentiza.

A menudo, también consulto otros sitios en los que estoy para ver cómo se comparan.

Bueno, ¿no sería bueno si hubiera una extensión de Chrome que le permitiera usar GTmetrix para verificar la velocidad del sitio de cualquier sitio que estuviera navegando, simplemente haciendo clic en un botón?

Revisé Chrome Web Store y no había una extensión que realizara esta acción, así que eso es exactamente lo que vamos a crear hoy.

¿Qué es una extensión de Chrome?

Antes de comenzar a crear nuestra extensión, probablemente sea una buena idea tener un conocimiento básico de qué es una extensión de Chrome y cómo funcionan las extensiones de Chrome.

En un nivel muy básico, una extensión de Chrome es solo algo de HTML, CSS y JavaScript que le permite agregar algunas funciones a Chrome a través de algunas de las API de JavaScript que Chrome expone. Una extensión es básicamente una página web alojada en Chrome y puede acceder a algunas API adicionales.

En este tutorial, le mostraré cómo crear una extensión básica de Chrome llamada extensión de acción del navegador. Este tipo de extensión coloca un botón en la barra de herramientas de Chrome que mostrará una página HTML al hacer clic y, opcionalmente, ejecutará algo de JavaScript.

Las extensiones de Chrome también se pueden crear para que funcionen solo en ciertas páginas mediante el uso de Acciones de página, pueden ejecutar código en segundo plano usando Páginas de fondo e incluso pueden modificar una página existente cargada en el navegador usando Scripts de contenido. Pero para este tutorial vamos a simplificar las cosas.

Si está interesado en obtener más información sobre las extensiones de Chrome en general, consulte la documentación de extensiones de Chrome.

Paso 1: crea el proyecto

Lo primero que debemos hacer es crear el proyecto y todos los archivos que necesitamos para nuestra extensión. Comencemos por crear un nuevo directorio que llamaremos “Extensión GTmetrix”. Pondremos todos los archivos que necesitamos para nuestra extensión en esta nueva carpeta. Chrome nos permite cargar un complemento apuntándolo a una carpeta que contiene los archivos de extensión.

Todas las extensiones de Chrome requieren un archivo de manifiesto. El archivo de manifiesto le dice a Chrome todo lo que necesita saber para cargar correctamente la extensión en Chrome. Entonces crearemos un archivo manifest.json y lo colocaremos en la carpeta que creamos. Puede dejar el archivo de manifiesto en blanco por ahora.

A continuación, necesitaremos un icono para nuestra extensión. Esto solo debe ser un archivo PNG de 19x19px. Puede obtener un icono de muestra del proyecto de demostración de Google que puede modificar.

A continuación, necesitaremos una página HTML para mostrar cuando un usuario haga clic en nuestra Acción del navegador, por lo que crearemos un archivo popup.html y un archivo popup.js en nuestro directorio “Extensión GTmetrix”.

Debido a restricciones de seguridad, no podemos colocar JavaScript en línea en nuestros archivos HTML dentro de nuestras extensiones de Chrome, por lo que tenemos que crear un archivo separado para contener cualquier código JavaScript que necesitemos y lo haremos referencia desde el archivo HTML.

Paso 2: crea el archivo de manifiesto

Ahora que tenemos nuestra estructura de proyecto básica, necesitamos agregar el código a nuestro archivo de manifiesto para describir nuestro complemento a Chrome.

Abra el archivo manifest.json e ingrese el siguiente código:

{
  "manifest_version": 2,

  "name": "GTmetrix Analyzer Plugin",
  "description": "This extension will analyze a page using GTmetrix",
  "version": "1.0",

  "browser_action": {
   "default_icon": "icon.png",
   "default_popup": "popup.html"
  },
  "permissions": [
   "activeTab"
   ]
}

La mayoría de los campos en este archivo JSON se explican por sí mismos, por lo que no perderé su tiempo explicándolo todo, pero tome nota de la sección browser_action donde especificamos cuál es el ícono predeterminado y qué página HTML debe mostrarse cuando la acción del navegador se hace clic en el botón.

También notará que agregué una sección de permisos que especifica que necesitamos tener permiso para acceder a activeTab. Esto es necesario para que podamos obtener la URL de la pestaña actual para pasarla a GTmetrix.

Muchas de las API que Chrome expone para que las use con sus extensiones requieren que especifique los permisos que necesite.

Paso 3: crea la interfaz de usuario

El siguiente paso es crear la interfaz de usuario que mostrará nuestra Acción del navegador cuando se haga clic en ella.

Nuestra interfaz de usuario será muy simple y constará de un texto que dice “GTmetrix Analyzer”, seguido de un botón en el que el usuario puede hacer clic para realizar el análisis en la página actual.

Abra la página popup.html y agregue lo siguiente:

<!doctype html>
<html>
  <head>
    <title>GTmetrix Analyzer</title>
    <script src="popup.js"></script>
  </head>
  <body>
    <h1>GTmetrix Analyzer</h1>
    <button id="checkPage">Check this page now!</button>
  </body>
</html>

Notarás que en este HTML he incluido el script popup.js. Aquí es donde pondremos la lógica para nuestra extensión que se ejecutará cuando se haga clic en el botón con el ID de checkPage.

Paso 4: implementar la lógica

Lo último que debemos hacer para crear el complemento es implementar la lógica que debe ejecutarse cuando un usuario hace clic en “¡Revise esta página ahora!” botón dentro de una pestaña.

Querremos agregar un detector de eventos para escuchar el evento de clic en el botón checkPage. Cuando se hace clic en él, debemos crear un nuevo formulario para enviar a GTmetrix que contiene la URL de la página actual, la envía y luego muestra el resultado.

Abra el archivo popup.js y agregue el siguiente código:

document.addEventListener('DOMContentLoaded', function() {
  var checkPageButton = document.getElementById('checkPage');
  checkPageButton.addEventListener('click', function() {

    chrome.tabs.getSelected(null, function(tab) {
      d = document;

      var f = d.createElement('form');
      f.action = 'http://gtmetrix.com/analyze.html?bm';
      f.method = 'post';
      var i = d.createElement('input');
      i.type = 'hidden';
      i.name = 'url';
      i.value = tab.url;
      f.appendChild(i);
      d.body.appendChild(f);
      f.submit();
    });
  }, false);
}, false);

Tomé prestado la mayor parte del código para crear y enviar el formulario del bookmarklet proporcionado en el sitio web de GTmetrix. Acabo de modificar el código para incluir la URL de la pestaña actualmente activa.

Si examina el código anterior, verá que primero estamos registrando un controlador para el evento de clic en el botón checkPage. Luego, cuando se hace clic en el botón, obtenemos la pestaña seleccionada actualmente y ejecutamos algo de JavaScript para crear un formulario con algunos campos ocultos que se envía a GTmetrix. Usamos la URL de la pestaña actual para decirle a GTmetrix para qué página ejecutar la prueba.

Probándolo

Es muy fácil probar una nueva extensión en Chrome. Escriba “chrome: // extensions” en una pestaña para abrir la página de extensiones.

Continue Reading

cómo

Cómo migrar grupos de chat de WhatsApp a Signal

Published

on

By

Cómo migrar grupos de chat de WhatsApp a Signal

La nueva política de WhatsApp para compartir datos con Facebook hace que algunos usuarios se sientan incómodos. Uno de los más importantes es la cantidad de grupos de chat que se han creado durante mucho tiempo en WhatsApp.

Signal, a través de su cuenta oficial de Twitter, comparte cómo mover grupos desde aplicaciones distintas a Signal.

“Muchos usuarios han preguntado cómo mover el chat grupal de otras aplicaciones a Signal, y Signal Group Links es una excelente manera de comenzar”, escribió la cuenta @signalapp.

Primero, lo que tienes que hacer es crear un grupo de chat en la aplicación Signal.

Luego, vaya a la sección de configuración del grupo. Luego haga clic en la opción ‘Enlace de grupo’.

Próximo paso

Después de eso, active la opción ‘Enlace de grupo’ y seleccione la opción ‘Compartir’. Este paso activará el enlace de grupo que se ha creado y está listo para ser compartido con grupos en WhatsApp u otras aplicaciones.

Por último, comparta el enlace del grupo de señales anteriormente con el grupo existente.

Este método moverá fácilmente miembros de un grupo existente, simplemente haciendo clic en el enlace del grupo de Signal compartido. Hágalo de esta manera desde el principio para otros grupos de chat existentes. ¡Buena suerte!

Continue Reading
Advertisement
Advertisement

Categories

Trending

close
Copy link
Powered by Social Snap