#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <unistd.h>
int main( ) {
int value = 10 ;
pid_t pid;
pid = fork( ) ;
if ( pid > 0 ) {
value += 10 ;
waitpid( - 1 , NULL, 0 ) ;
printf ( "%d: val = %d\n " , getpid
( ) , value
) ; }
pid = fork( ) ;
if ( pid == 0 ) {
pid = fork( ) ;
if ( pid > 0 ) {
value += 15 ;
printf ( "%d: val = %d\n " , getpid
( ) , value
) ; }
else if ( pid == 0 ) {
value /= 4 ;
printf ( "%d: val = %d\n " , getpid
( ) , value
) ; }
}
else {
value -= 10 ;
}
waitpid( - 1 , NULL, 0 ) ;
printf ( "%d: val = %d\n " , getpid
( ) , value
) ;
return 0 ;
}
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KCmludCBtYWluKCkgewogICAgaW50IHZhbHVlID0gMTA7CiAgICBwaWRfdCBwaWQ7CgogICAgcGlkID0gZm9yaygpOwoKICAgIGlmIChwaWQgPiAwKSB7CiAgICAgICAgdmFsdWUgKz0gMTA7CiAgICAgICAgd2FpdHBpZCgtMSwgTlVMTCwgMCk7CiAgICAgICAgcHJpbnRmKCIlZDogdmFsID0gJWRcbiIsIGdldHBpZCgpLCB2YWx1ZSk7CiAgICB9CgogICAgcGlkID0gZm9yaygpOwogICAgaWYgKHBpZCA9PSAwKSB7CiAgICAgICAgcGlkID0gZm9yaygpOwogICAgICAgIGlmIChwaWQgPiAwKSB7CiAgICAgICAgICAgIHZhbHVlICs9IDE1OwogICAgICAgICAgICBwcmludGYoIiVkOiB2YWwgPSAlZFxuIiwgZ2V0cGlkKCksIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocGlkID09IDApIHsKICAgICAgICAgICAgdmFsdWUgLz0gNDsKICAgICAgICAgICAgcHJpbnRmKCIlZDogdmFsID0gJWRcbiIsIGdldHBpZCgpLCB2YWx1ZSk7CiAgICAgICAgfQogICAgfSAgICAKICAgIGVsc2UgewogICAgICAgIHZhbHVlIC09IDEwOwogICAgfQoKICAgIHdhaXRwaWQoLTEsIE5VTEwsIDApOwogICAgcHJpbnRmKCIlZDogdmFsID0gJWRcbiIsIGdldHBpZCgpLCB2YWx1ZSk7CgogICAgcmV0dXJuIDA7Cn0K