Procesos en C: Crear un nuevo proceso con fork()

Siguiendo con los artículos sobre procesos voy a poner aquí un sencillo ejemplo para ilustrar el funcionamiento de la función fork().

Esta función es la que se encarga de crear un nuevo proceso dentro de un proceso. El nuevo proceso creado es una copia exacta del original, con la única diferencia que cada uno de ellos tiene su propio identificador de proceso (pid).

En un próximo post explicaré cómo convertir el proceso hijo en un nuevo proceso totalmente diferente (con el conjunto de funciones ‘exec’). Esto nos permitirá lanzar un programa desde dentro de otro.


Curso de programación en C para principiantes

Ejercicios de C resueltos y comentados

5 thoughts on “Procesos en C: Crear un nuevo proceso con fork()

  1. Ayuda con mi codigo amigo, se trata de mostrar los id de los procesos hijos,
    esto lo hace el proceso padre, mediante la lectura de un archivo, el cual contiene los id que previamente fueron escritos.

    #include
    #include
    main()
    {
    int n;
    char car;
    FILE *fich;
    if ((fich = fopen(“fichreg.txt”, “w+”)) == NULL)
    printf (“Error en apertura del fichero para lectura \n”);
    else
    {
    system(“clear”);
    switch (fork()) {
    case -1: perror(“NO SE PUEDE CREAR EL PROCESO\n”);
    break;

    case 0: n=getpid();
    fprintf(fich,”%d “,n);
    break;

    case 1:n=getpid();
    fprintf(fich,”%d “,n);
    break;

    case 2:
    n=getpid();
    fprintf(fich,”%d “,n);

    break;

    case 3:
    n=getpid();
    fprintf(fich,”%d “,n);
    break;

    case 4 :
    n=getpid();
    fprintf(fich,”%d “,n);

    default:
    car=getc(fich);
    while(car!=feof(fich))
    {
    putc(car,fich);
    car=fgetc(fich);
    }
    fclose(fich);
    break;
    }//FIN SWITCH
    return (0);

    }//FIN ELSE
    }//FIN MAIN
    Lo compilo y se queda ahí sin poner nada, no se sí esta funcionando pero lo termino, hay algun error?
    Gracias

  2. No entiendo bien lo que intentas hacer. El programa no contiene ningún error pero no tiene sentido, la verdad. Entiendo que quieres lanzar varios procesos pero solo usas un fork(), que es el encargado de crear nuevos procesos.

    Luego usas un switch que no tiene mucho sentido ya que solo te funcionaría si los procesos hijo tuvieran como pid 1, 2, 3 ó 4. Ten en cuenta que no puedes saber a priori los pid de los procesos hijos (y desde luego sus valores van a ser mucho más altos que éstos).

  3. Hola mira no se si me puedes ayudar con una idea de un programa: Debo de crear 3 procesos con diferentes actividades cada uno, no sabes como podria asignarle una tarea independiente a cada proceso?.
    Saludos

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.