Las
llamadas al sistema son puntos de entrada al núcleo (kernel) de Linux.
Éstas usualmente no son invocadas de forma directa, sino que se utilizan
funciones wrapper de la librería del lenguaje C, glibc, para que estas hagan una serie de pasos necesarios para que la llamada sea exitosa [2]. Estos wrappers normalmente tienen el mismo nombre de la función original y el trabajo que hacen es mínimo la mayoría de las veces.
Cuando
una llamada al sistema falla retorna un número de error negativo, pero
la función de C retorna -1 y le asigna este número de error negado
(positivo) a la variable errno (errno.h).
Aunque no es
el caso común, algunas de las llamadas al sistema no tienen una función
equivalente proveída por la librería de C, así que hay que llamarlas
directamente mediante la función syscall [3] (sys/syscall.h).
Control de Señales [4]
Las
señales son utilizadas para notificar a un proceso o hilo acerca de un
evento dado y son comúnmente comparadas con las interrupciones de hardware, ya que cuando un proceso recibe una señal puede que se ejecute un manejador de señal, que es equivalente al sistema ejecutando un manejador de interrupcion tras recibir una.
Una señal puede originarse desde excepciones por hardware, llamadas al sistema, eventos gestionados por el núcleo (alarmas), etc.
Cada
señal tiene un nombre único, una abreviacion que comienza por SIG (como
SIGINT para la señal de interrupción) y un número de señal.
Adicionalmente el sistema define cuatro posibles disposiciones o acciones a tomar cuando se recibe una señal :
- Exit (salir): fuerza al proceso a terminar.
- Core (núcleo): fuerza al proceso a terminar y a crear un archivo de núcleo (core file).
- Stop (parar): para el proceso.
- Ignore (ignorar): ignora la señal; no se toma ninguna acción.
Dentro de un proceso y sus hilos cada señal tiene el mismo manejador de señal,
el cual puede ser cambiado a uno diferente del que la señal tiene por
defecto (excepto por SIGKILL y SIGSTOP). Un proceso además puede
capturar una señal y ejecutar una rutina de manejo de señal propia.
Aqui se puede observar la lista de señales utilizadas [5] .
Control de Procesos [6]
Aqui se puede observar la lista de señales utilizadas [5] .
Control de Procesos [6]
En
este tópico parece no haber mucho que decir; existe una serie de
herramientas para administrar los procesos, algunas de las cuales se
valen de señales para cumplir con su objetivo.
KILL: es la función y llamada al sistema que envía una señal a un proceso determinado por parámetro. Su prototipado:
KILL: es la función y llamada al sistema que envía una señal a un proceso determinado por parámetro. Su prototipado:
Ejemplo [7]
int kill(pid_t pid, int sig);
pid < 0: se envía la señal sig al proceso identificado por pid
pid = -1:se envía la señal sig a todos los procesos menos al primero (el programa init)
pid < -1: se envía la señal sig al grupo de procesos identificado por el valor de -pid
Esta
función ejemplifica parte del proceso que une los tres temas tratados
anteriormente ya que se trata de una Llamada al Sistema con la que se
controlan los procesos mediante una señal especificada (como pueden ser
SIGSTOP, SIGCONT, SIGTERM; cada una con resultados diferentes).
0 comentarios:
Publicar un comentario