Tuesday, 28 November 2017

Consejos y trucos, artículos básicos sobre configuraciones que ayudan a un mejor desempeño de nuestros SO's. Cada proceso ha sido personalmente comprobado.





En este blog continuamos con la parte de comandos referentes a los archivos, así que sigamos aprendiendo acerca de los maravillosos y geniales comandos Linux.

El cajón de los comandos Linux es una guía de referencia rápida para todos los usuarios Linux que desean aprender los comandos de este gran SO. Los comandos se dividen en 15 categorías, lo cual nos permite tener un mayor entendimiento acerca de que comando utilizar en una específica situación. El agradecimiento total al creador de esta guía +Bobbin Zachariah.

Esta guía puede ser utilizada ya sea para usuarios nuevos o avanzados, proveyendo el mejor esfuerzo para dar a conocer los comandos Linux más relevantes. 

Así que empecemos con la 2a parte de los comandos referentes a los procesos.


Señales
Las señales en Linux son un concepto muy importante a entender, esto se debe a que las señales están presentes en las actividades más comunes que hacemos por medio de la línea de comandos. Por ejemplo, cuando presionamos CTRL + C para terminar un proceso en la terminal usamos señales; también al utilizar kill -9 +[pid] para matar procesos, estamos haciendo uso de las señales. Así que es muy importante saber al menos lo básico acerca de las señales y eso es lo que veremos en este blog.


¿Qué es una señal?
La señal no es más que una forma de comunicar un mensaje de un proceso a otro. Estos mensajes se conocen popularmente como notificaciones, las cuales el proceso de recepción es libre de ignorar, procesarlas o dejar estas en manos del sistema operativo para tomar una acción predeterminada (veremos un poco más de esto luego). Una notificación enviada por el proceso del remitente al proceso de recepción puede ser de varios tipos, por ejemplo, las notificaciones pueden ser para matar el proceso de recepción o hacerle saber que ha accedido a un área de memoria no válida, o puede ser una notificación de disponibilidad de un recurso (que estaba ocupado anteriormente), etc. Entonces, podemos ver que las señales no son más que otra forma de IPC (Inter-process Comunication o comunicación entre procesos).

¿Por qué las señales son importantes?
Las señales son importantes, de hecho, muy importantes porque conducen algunas de las actividades de programación y administración de los sistemas más populares; podriamos tomar como ejemplo un depurador, el cual es utilizado por los programadores para probar el código de su programa mientras este se ejecuta, si alguna vez han usado un depurador, sabrán que los puntos de interrupción se utilizan para detener la ejecución de un programa en líneas de código específicas.

¿Alguna vez pensaste que es lo que hace que un programa sepa que ha sido interrumpido y necesita detener su ejecución? Sí, es una señal (SIGSTOP) la cual es enviada al programa en este caso, y al finalizar la depuración, otra señal es enviada al programa (SIGCONT) para que este continue su ejecución.

Entonces, este fue un ejemplo. Pero hay muchas otras actividades que son completamente dependientes de las señales.

¿Cómo un programa maneja las señales?

Un programa puede manejar las señales de tres maneras que son las siguientes:

1. Proporcionando su propio manejador para controlar una señal en particular.Esto es especialmente importante en esos casos en donde el programa tiene que realizar algunas tareas (por ejemplo, actividades de limpieza de memoria) en respuesta a la señal recibida; un manejador de señal es simplemente una función definida en el código del programa que se ejecuta automáticamente (En realidad se activa por el kernel del SO) cuando el programa recibe una señal.

2.Hay programas que no reaccionan al recibir señales. Cada señal tiene una acción por defecto asociada a ella, en un escenario en donde al programa simplemente no le da interés la señal, la acción por defecto correspondiente a esa señal en específico es tomada por el kernel del sistema operativo.

3.Un programa puede elegir ignorar una señal. En esta situación, la señal (o grupo de señales) son bloqueadas y por lo tanto no llegan al programa, un programa puede escoger ignorar señales las cuales, el programador cree que son irrelevantes para este.

Diferentes tipos de señales

Para poder obtener una lista de señales compatibles en Linux, simplemente ejecutamos el siguiente comando:
                                                        

La opción -l del comando kill lo utilizamos para listar los nombres de cada señal, veamos un ejemplo...

Si eres un administrador de sistemas o un experto en la línea de comandos, definitivamente has utilizado este comando para matar un proceso, donde PID es el número que identifica al proceso que queremos detener:


¿Alguna vez te has preguntado que significa el -9? Bueno, pues se refiere a una señal con el valor numérico de 9, sí, las señales(como se puede ver en lo que nos imprimió el comando kill -l acá arriba)  tienen valores numéricos asociados a ellas; para saber cual es la señal con el valor numérico 9, utilizamos el siguiente comando:


Así que como pueden ver la señal con el valor numérico de 9 corresponde a SIGKILL. De forma similar si queremos pasar el nombre de una señal a su valor numérico, podemos usar el mismo comando, por ejemplo:


Así que como podemos ver, de esta forma el valor numérico correspondiente al nombre de una señal también puede ser obtenido.

Las señales SIGSTOP Y SIGKILL.
Las señales SIGSTOP y SIGKILL merecen una mención especial por el hecho que estas señales no pueden ser controladas por los programas.
SIGSTOP:  esta señal es enviada por un proceso para poder detener un programa para que este pueda ser depurado. Ahora bien, supongamos que a los programas se les diera la capacidad de manejar esta señal y un programa accidentalmente elige ignorar esta señal, entonces el programa nunca podrá ser depurado.
SIGKILL: esta señal es enviada por un proceso para poder terminar inmediatamente con el proceso que se está recibiendo, esto quiere decir, que la forma en que termina con el proceso es anormal y sin gracia. Esta señal se utliza en casos en donde el proceso se corta o para terminarlo de inmediato, por ejemplo, esta señal en algunas ocasiones es utilizada por el kernel del sistema operativo al apagar el ordenador.

Características de las señales.
Aquí están algunas de las características más importantes de las señales en Linux:
  • Si un proceso tiene múltiples hilos entonces una señal interrumpe solo un hilo y no todo el proceso por completo, esto aplica desde kernel Linux 2.6 a la fecha.
  • Un controlador de señales también puede ser interrumpido por la recepción de otra señal.
  • A parte del conjunto de señales estándar, también existen señales definidas por el usuario.
En términos de código, el control de señales solo se puede hacer con funciones como signal() y sigaction().
Linux trata todo como archivo, incluso los procesos aparecen como archivos en los directorios /proc;
los procesos básicamente son programas en ejecución, también se conocen como trabajos. Podemos correr trabajos en el fondo sin ninguna intervención del usuario, estos también se pueden correr al frente como trabajos en ejecución. Los comandos bg y fg sirven para esto.

$ bg

Los procesos que se han interrumpido por alguna señal se pueden continuar ejecutando en el fondo con el comando bg.


Este proceso ha sido interrumpido con la señal Ctrl+z, podemos revisar el proceso detenido con el comando jobs, pero antes, creemos otro trabajo e interrumpamoslo de nuevo con Ctrl+z.


Como podemos ver al ejecutar jobs, los trabajos están detenidos, el símbolo más (+) indica un proceso que se está ejecutando, el símbolo menos (-) nos indica el proceso anterior. Ahora bien, si queremos correr el trabajo que está detenido en el fondo, utilizamos el comando bg, por defecto al no agregar argumento este correrá el último trabajo que hayamos detenido.


El comando bg puede tomar el número del trabajo como un argumento, este se indica entre los corchetes que aparecen al inicio de la línea; en el ejemplo de arriba,nautilus aparece con el número 1. Asi que ahora simplemente utilizamos este número para volver a ejecutar el trabajo que teniamos detenido, el símbolo de porcentaje (%) es necesario para indicar el número del trabajo.


El comando bg también se puede referir a un trabajo por su nombre, por ejemplo:

Saludos especiales a tod@s espero este aporte pueda ser de ayuda. Si les fue útil compartan y comenten.


No comments:

Post a Comment