jueves, 18 de agosto de 2011

Ejemplo de Llamadas al Sistema


 
hijo.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

void alarma_sig() {
    printf("  ---------------------------------------------saliendo del programa hijo\n");
    exit(0);
}

void main() {
    printf("  ---------------------------------------------Proceso hijo\n");

    //Preparamos el programa para recibir la señal "alarma"
    signal(SIGALRM,alarma_sig);

    //Enviamos una señal "alarma" en 5 segundos
    alarm(5);

    //Ponemos el proceso en espera
    pause();
}

padre.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


void main() {
    pid_t pid_padre;
    pid_t pid_hijo;
    int salida_hijo;
    pid_padre = getpid();

    printf("-----------------------------------------------Proceso padre\n  PID: %d\n",pid_padre);

    pid_hijo = fork();

    if(pid_hijo == -1) {
        printf("  Error al crear proceso hijo\n");
        exit(0);
    }
  
    if (pid_hijo) {
        //Proceso padre

        printf("  proceso hijo creado con PID: %d\n",pid_hijo);

        //Esperamos a que el proceso hijo termine
        //para evitar que quede en estado zombie
        waitpid(pid_hijo,&salida_hijo,0);

        //El proceso hijo ha finalizado después de 5 segundos
        printf("  salida hijo: %d\n",salida_hijo);

        //Enviamos una señal "alarma" en 20 segundos
        alarm(20);

        //Ponemos el proceso en espera
        pause();
    }else{
        //Proceso hijo

        execl("/home/[user]/Documentos/hijo","hijo",(char *) 0);
    }
}

Resultado de ejecución...

-----------------------------------------------Proceso padre
  PID: 3396
  proceso hijo creado con PID: 3397
  ---------------------------------------------Proceso hijo
  ---------------------------------------------saliendo del programa hijo
  salida hijo: 0
Temporizador

No hay comentarios:

Publicar un comentario