/*Realice un programa en c que lance un proceso hijo. Este proceso debe mostrar el mensaje "han
pasado N segundos" cada 5 segundos, reemplazando N por el numero de segundos transcurridos desde el lanzamiento del programa. Cuando el usuario presione CTRL+C el padre debe escribir el mensaje
"Fin del cronometro", matar al hijo y escribir su estado de fianlizacion "Estado del hijo:
ESTADO". Solo se pueden usar llamadas al sistema, incluyendo la escritura de mensajes por pantalla*/
Lo que yo he hecho es esto:
#include
#include
#include
int contador = 0;
int bucle=1;
int pid, status;
void manejador(int signum){
contador += 5;
printf("Han transcurrido %d segundos\n", contador);
}
void cortar();
void main(){
pid_t getpid(), getppid();
pid=fork();
if(pid==-1){
printf("No se puede crear procesos");
}else{
if(pid==0){
signal(SIGINT,cortar);
if (signal(SIGALRM, manejador) == SIG_ERR){
perror("fallo en signal");
exit(EXIT_FAILURE);
}
while(bucle){
alarm(5);
pause();
}
pause();
}
}
wait(&status);
kill(getpid(),SIGKILL);
printf("Hijo terminado con estado %d", getpid());
}
void cortar(){
signal (SIGINT, SIG_IGN);
printf ("Has pulsado CTRL-C\n");
signal (SIGINT, cortar);
bucle=0;
}
No se me da muy bien programar en c en linux... Es un ejercicio que tengo que entregar en septiembre de este año para poder rcuperar una asignatura que me quedo pendiente.
En lo que yo hago me funciona bien la captura de alarma, y la de capturar SIGINT a medias, ya que me muestra el mensaje por pantalla pero no lo hace bien del todo... Y lo de mostrar el mensaje que tendria que salir de "Proceso hijo acabado..." no me muestra nada, y de hecho creo que de esa parte cuando sale del if no me hace nada...
Alguien tiene alguna idea??
Por favor, ya se que no es cuestion de exigir, pero pediria las explicaciones lo mas sencillas posibles, ya que insisto que este tipo de programacion no se me da bien...
Gracias desde ya