jueves, 22 de septiembre de 2011

Procesos

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>


int main (void) {


/**ATENCIÓN: Declaración de variables del programa a probar. Es sólo un exemplo**/
    int i;
    int n = 4;
    int childpid;


/**El resto de variables son para que la presentación de los resultados por pantalla sea posible**/
  
    int a, p;
    int ret;
    FILE *fpipe;
    char comanda[50]; /*String dónde se guarda el comando a ejecutar por el 1r hijo*/
    char line[256];         
    p = getpid();


    sprintf(comanda,"pstree -n -p %d\n",getpid()); /*Concatenamos el comando pstree con el pid del padre*/


    ret = fork();


    if (ret == 0) { /*Este es el primer hijo del padre*/
        if ( !(fpipe = (FILE*)popen(comanda,"r")) ) {  /* Si el pipe falla*/
            perror("Problemas con el pipe!!!");
            exit(1);
        }
        while ( fgets( line, sizeof line, fpipe))
        {
            printf("%s", line); /*Escribimos por pantalla lo que retorna el hijo. La salida del pstree*/
        }
        pclose(fpipe);


      
    } else {
        /*El primer hijo sólo se crea para hacer un pstree y poder ver por pantalla */
        /*el árbol de procesos generado*/


        /*El código que viene a continuación, lo podéis substituir por lo que se tercie*/
        /*¡¡Las variables han de ir declaradas arriba!!!*/


      
        for (i = 1; i < n; i++) {
            if ((childpid = fork()) == -1) {
                break;
                }
            fprintf(stderr, "Este es el proceso %ld com padre %ld\n", (long)getpid(), (long)getppid());      
                    }
        sleep(1); /*Es sólo para dar tiempo a terminar a todos los hijos*/


    }
exit(0);
}


1. Por que aparecen mensajes repetidos
Por que se tiene la instrucción for y de igual manera va mostrando los procesos que se están realizando, asignándoles asi un PID mejor conocido como numero único de identificación, en el cual se van registrando cada uno de los procesos del SO

2.Que observas
Que muchos de esos procesos se repiten dos o tres veces, debido a que se ejecutan dos procesos en paralelo con un nuevo hijo que es una copia de los padres, haciendo así que la función CHILPID nos regrese el valor del proceso padre, devolviendo así 0 al proceso hijo

3. Porque
Son parte fundamental de los sistemas operativos debido a que toda acción relizada en la computadora debe tener un PID para mayor organización, teniendo en cuenta que los pipe son mecanismos utilizados para compartir la información

No hay comentarios:

Publicar un comentario