#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
int glob = 6;
char buf[] = "a write to stdout\n";
void print_err(char *msg, int n) {
write(STDOUT_FILENO, msg, n);
}
int main() {
int var;
pid_t pid;
var = 88;
if(write(STDOUT_FILENO, buf, sizeof(buf) - 1) != sizeof(buf) - 1)
print_err("write error\n", 12);
if((pid = fork()) < 0)
print_err("fork error\n", 11);
else if(pid == 0) {
glob++;
var++;
printf("pid = %d, glob = %d, var = %d\n", getpid
(), glob
, var
); if((pid = fork()) < 0) print_err("fork error\n", 11);
if(pid == 0) {
glob++;
var++;
printf("pid = %d, glob = %d, var = %d\n", getpid
(), glob
, var
); if((pid = fork()) < 0) print_err("fork, error\n", 11);
if(pid == 0) {
glob++;
var++;
printf("pid = %d, glob = %d, var = %d\n", getpid
(), glob
, var
); } else {
sleep(1);
}
} else {
sleep(2);
}
} else {
sleep(3);
}
printf("pid = %d, glob = %d, var = %d\n", getpid
(), glob
, var
); }
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CgppbnQgZ2xvYiA9IDY7CmNoYXIgYnVmW10gPSAiYSB3cml0ZSB0byBzdGRvdXRcbiI7Cgp2b2lkIHByaW50X2VycihjaGFyICptc2csIGludCBuKSB7Cgl3cml0ZShTVERPVVRfRklMRU5PLCBtc2csIG4pOwoJZXhpdCgxKTsKfQoKaW50IG1haW4oKSB7CglpbnQgdmFyOwoJcGlkX3QgcGlkOwoKCXZhciA9IDg4OwoKCWlmKHdyaXRlKFNURE9VVF9GSUxFTk8sIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKSAhPSBzaXplb2YoYnVmKSAtIDEpCgkJcHJpbnRfZXJyKCJ3cml0ZSBlcnJvclxuIiwgMTIpOwoKCXByaW50ZigiYmVmb3JlIGZvcmtcbiIpOwoKCWlmKChwaWQgPSBmb3JrKCkpIDwgMCkKCQlwcmludF9lcnIoImZvcmsgZXJyb3JcbiIsIDExKTsKCWVsc2UgaWYocGlkID09IDApIHsKCQlnbG9iKys7CgkJdmFyKys7CgkJcHJpbnRmKCJwaWQgPSAlZCwgZ2xvYiA9ICVkLCB2YXIgPSAlZFxuIiwgZ2V0cGlkKCksIGdsb2IsIHZhcik7CgkJaWYoKHBpZCA9IGZvcmsoKSkgPCAwKSBwcmludF9lcnIoImZvcmsgZXJyb3JcbiIsIDExKTsKCQlpZihwaWQgPT0gMCkgewoJCQlnbG9iKys7CgkJCXZhcisrOwoJCQlwcmludGYoInBpZCA9ICVkLCBnbG9iID0gJWQsIHZhciA9ICVkXG4iLCBnZXRwaWQoKSwgZ2xvYiwgdmFyKTsKCQkJaWYoKHBpZCA9IGZvcmsoKSkgPCAwKSBwcmludF9lcnIoImZvcmssIGVycm9yXG4iLCAxMSk7CgkJCWlmKHBpZCA9PSAwKSB7CgkJCQlnbG9iKys7CgkJCSAgICB2YXIrKzsKCQkJICAgIHByaW50ZigicGlkID0gJWQsIGdsb2IgPSAlZCwgdmFyID0gJWRcbiIsIGdldHBpZCgpLCBnbG9iLCB2YXIpOwoJCQl9IGVsc2UgewoJCQkJc2xlZXAoMSk7CgkJCX0KCQl9IGVsc2UgewoJCQlzbGVlcCgyKTsKCQl9Cgl9IGVsc2UgewoJCXNsZWVwKDMpOwoJfQoKCXByaW50ZigicGlkID0gJWQsIGdsb2IgPSAlZCwgdmFyID0gJWRcbiIsIGdldHBpZCgpLCBnbG9iLCB2YXIpOwoJZXhpdCgwKTsKfQo=
a write to stdout
before fork
pid = 29334, glob = 7, var = 89
pid = 29335, glob = 8, var = 90
pid = 29336, glob = 9, var = 91
pid = 29336, glob = 9, var = 91
before fork
pid = 29334, glob = 7, var = 89
pid = 29335, glob = 8, var = 90
pid = 29335, glob = 8, var = 90
before fork
pid = 29334, glob = 7, var = 89
pid = 29334, glob = 7, var = 89
before fork
pid = 29271, glob = 6, var = 88