Forgetful Interpreter

Jeff Epler jepler at unpythonic.net
Sat Oct 18 10:03:59 EDT 2003


What you are doing won't work -- fork() behaves as though it makes a
copy of all the data in the current process's address spaces, so changes
in the child aren't mirrored in the parent.

Example C program:

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

int i = 0;

void increment_i_in_forked_subprocess() {
    pid_t pid = fork();
    if (pid == -1) { 
        perror("fork"); exit(1);
    }
    if (pid == 0) {
        i++;
        printf("In subprocess %d, i=%d\n", getpid(), i);
        exit(0);
    }
    wait(NULL);
    printf("Subprocess exited\n");
}

int main(void) {
    int j;
    for(j=0; j<10; j++) {
        increment_i_in_forked_subprocess();
    } 
    return 0;
}

$ gcc orcutt.c  && ./a.out
In subprocess 16632, i=1
Subprocess exited
In subprocess 16633, i=1
Subprocess exited
In subprocess 16634, i=1
Subprocess exited
In subprocess 16635, i=1
Subprocess exited
In subprocess 16636, i=1
Subprocess exited
In subprocess 16637, i=1
Subprocess exited
In subprocess 16638, i=1
Subprocess exited
In subprocess 16639, i=1
Subprocess exited
In subprocess 16640, i=1
Subprocess exited
In subprocess 16641, i=1
Subprocess exited






More information about the Python-list mailing list