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