Esse documento representa parte dos meus estudos acerca do Livro - Operational Systems Three Easy Pieces, de dominio publico.


Process API

The Fork() Call

Fork() eh usada para criar um novo processo.

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

int main(int argc, char *argv[]) {
    printf("hello (pid:%d)\n", (int) getpid());
    int rc = fork();
    if (rc < 0) {
        // fork failed
        fprintf(stderr, "fork failed\n");
        exit(1);
    } else if (rc == 0) {
        // child (new process)
        printf("child (pid:%d)\n", (int) getpid());
    } else {
        // parent goes down this path (main)
        printf("parent of %d (pid:%d)\n",
               rc, (int) getpid());
    }
    return 0;
}

Podemos perceber que a funcao fork() cria uma ramificacao a partir do processo atual, com outro PID (Process Identifir). Esta funcao cria uma copia quase exata (a excessao do PID) do processo que a chama, neste caso a rotina main. Entretanto, ele podemos notar que ele nao printa novamente o hello world, pois a nova routina surge a partir do momento em que fork eh chamado. Por isso, no controle de fluxo, temos

// TODO

Bibliografia

https://pages.cs.wisc.edu/~remzi/OSTEP/cpu-api.pdf