Sie sind auf Seite 1von 3

Unidad Profesional Interdisciplinaria de Ingeniería y Tecnología Avanzadas

Telemática

SISTEMAS OPERATIVOS

PRACTICA 6. Señales

Las señales son interrupciones software que pueden ser enviadas aun proceso para
informarle de algún evento asíncrono o situación especial. Revise la teoría vista en
clase.

Instrucciones: Codifique el siguiente código, compílelo y ejecútelo.

I.- El programa trata la señal SIGINT, generada al pulsar las teclas Ctrl + C
(interrupción)

Programa 1: signal.c

# include <signal.h>
main(){
void sigint_handler ();
if (signal (SIGINT,sigint_handler)==SIG_ERR)
{
perror (“signal”)
exit (-1);
}
while(1)
{
printf (“En espera de ctrl-c”);
sleep(999);} }

void sigint_handler (sig)


int sig;
{
printf(“Señal numero %d recibida \n “, sig);
}

Explique que hace el código, (su funcionamiento y uso de conceptos de sistemas


operativos, no explique las condicionales if y los ciclos while, ya que éstas
instrucciones son ya conocidas)

II.- El siguiente código envía la señal kill (terminación) a un proceso o grupo de


procesos al que pertenece este código. (nota: código ya visto en clase)
Unidad Profesional Interdisciplinaria de Ingeniería y Tecnología Avanzadas
Telemática

Programa 2: kill.c

#include<stdio.h>
#include<stdlib.h>
# include <signal.h>
main(){
int pid;
if ((pid==fork ( ))==0)
{
while(1)
{
printf ( "el PID del hijo es= %d\n", getpid ());
sleep(10);
}
}
sleep(1);
printf ("PADRE terminacion del proceso %d\n", pid);
kill(pid, SIGTERM);
exit(0);
}
pid en este caso identifica el conjunto de procesos al que se envía la señal.

Escriba los siguientes programas:

1.- Escriba un programa que cada que presione ctrl-c muestre el mensaje: “se
presiono ctrl-c”, cuando se hayan presionado 10 veces la tecla ctrl-c, el proceso debe
terminar

2.- codifique un programa que se envía señales a si mismo, para lograrlo utilice la
función raise, cuya declaración es la siguiente:

int raise ( int sig)

return kill( getpid( ), sig);

Donde sig es el numero de señal que queremos enviar.


Unidad Profesional Interdisciplinaria de Ingeniería y Tecnología Avanzadas
Telemática

Anexo, no incluido en la práctica

Revise el siguiente código, en donde el proceso está en espera de una señal y cada
vez que recibe una imprime un número aleatorio

#include<stdio.h>
#include<stdlib.h>
#include<signal.h>

main()
{
void manejador_SIGUSR1();
void manejador_SIGTERM();

signal (SIGTERM, manejador_SIGTERM);


signal (SIGUSR1, manejador_SIGUSR1);
while(1)
pause();
}

//saca un mensaje en pantalla y termina el proceso


void manejador_SIGTERM(int sig)
{
printf("Terminacion del proceso %d a peticion del usuario \n", getpid() );
exit(-1);
}

//presenta un numero aleatorio por pantalla

void manejador_SIGUSR1(int sig)


{
signal(sig,SIG_IGN);
printf("EL numero aleatorio es; %d \n", rand());
signal(sig,manejador_SIGUSR1);
}

Das könnte Ihnen auch gefallen