#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
void P0( ) {
int pid1, pid2, pid5;
pid1 = fork( ) ;
if ( pid1 == 0 ) {
// processus fils P1
P1( ) ;
} else {
// processus Parent P0
wait( NULL) ;
pid2 = fork( ) ;
if ( pid2 == 0 ) {
// processus fils P2
P2( ) ;
} else {
// processus Parent P0
wait( NULL) ;
pid5 = fork( ) ;
if ( pid5 == 0 ) {
// Child process P5
P5( ) ;
} else {
// processus Parent P0
wait( NULL) ;
printf ( "Process P0 finished.\n " ) ; }
}
}
}
void P1( ) {
printf ( "Process P1 started.\n " ) ;
printf ( "Process P1 finished.\n " ) ; }
void P2( ) {
int pid3, pid4;
pid3 = fork( ) ;
printf ( "Process P2 started.\n " ) ; if ( pid3 == 0 ) {
// processus fils P3
P3( ) ;
} else {
// processus Parent P2
wait( NULL) ;
pid4 = fork( ) ;
if ( pid4 == 0 ) {
// processus fils P4
P4( ) ;
} else {
// processus Parent P2
wait( NULL) ;
printf ( "Process P2 finished.\n " ) ; }
}
}
void P3( ) {
printf ( "Process P3 started.\n " ) ;
printf ( "Process P3 finished.\n " ) ; }
void P4( ) {
printf ( "Process P4 started.\n " ) ;
printf ( "Process P4 finished.\n " ) ; }
void P5( ) {
printf ( "Process P5 started.\n " ) ;
printf ( "Process P5 finished.\n " ) ; }
int main( ) {
P0( ) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAKdm9pZCBQMCgpIHsKICAgIGludCAgcGlkMSwgcGlkMiwgcGlkNTsKICAgIHBpZDEgPSBmb3JrKCk7CiAgICBpZiAocGlkMSA9PSAwKSB7CiAgICAgICAgLy8gcHJvY2Vzc3VzIGZpbHMgUDEKICAgICAgICBQMSgpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBwcm9jZXNzdXMgUGFyZW50ICBQMAogICAgICAgIHdhaXQoTlVMTCk7CiAgICAgICAgcGlkMiA9IGZvcmsoKTsKICAgICAgICBpZiAocGlkMiA9PSAwKSB7CiAgICAgICAgICAgIC8vIHByb2Nlc3N1cyBmaWxzIFAyCiAgICAgICAgICAgIFAyKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gcHJvY2Vzc3VzIFBhcmVudCAgUDAKICAgICAgICAgICAgd2FpdChOVUxMKTsKICAgICAgICAgICAgcGlkNSA9IGZvcmsoKTsKICAgICAgICAgICAgaWYgKHBpZDUgPT0gMCkgewogICAgICAgICAgICAgICAgLy8gQ2hpbGQgcHJvY2VzcyBQNQogICAgICAgICAgICAgICAgUDUoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIHByb2Nlc3N1cyBQYXJlbnQgIFAwCiAgICAgICAgICAgICAgICB3YWl0KE5VTEwpOwogICAgICAgICAgICAgICAgcHJpbnRmKCJQcm9jZXNzIFAwIGZpbmlzaGVkLlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KIAp2b2lkIFAxKCkgewogICAgcHJpbnRmKCJQcm9jZXNzIFAxIHN0YXJ0ZWQuXG4iKTsKIAogICAgcHJpbnRmKCJQcm9jZXNzIFAxIGZpbmlzaGVkLlxuIik7Cn0KIAp2b2lkIFAyKCkgewogIGludCBwaWQzLCBwaWQ0OwogCiAgICBwaWQzID0gZm9yaygpOwogICAgIHByaW50ZigiUHJvY2VzcyBQMiBzdGFydGVkLlxuIik7CiAgICBpZiAocGlkMyA9PSAwKSB7CiAgICAgICAgLy8gcHJvY2Vzc3VzIGZpbHMgUDMKICAgICAgICBQMygpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyAgcHJvY2Vzc3VzIFBhcmVudCBQMgogICAgICAgIHdhaXQoTlVMTCk7CiAgICAgICAgcGlkNCA9IGZvcmsoKTsKICAgICAgICBpZiAocGlkNCA9PSAwKSB7CiAgICAgICAgICAgIC8vICBwcm9jZXNzdXMgZmlscyBQNAogICAgICAgICAgICBQNCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIHByb2Nlc3N1cyBQYXJlbnQgUDIKICAgICAgICAgICAgd2FpdChOVUxMKTsKICAgICAgICAgICAgcHJpbnRmKCJQcm9jZXNzIFAyIGZpbmlzaGVkLlxuIik7CiAgICAgICAgfQogICAgfQp9CiAKdm9pZCBQMygpIHsKICAgIHByaW50ZigiUHJvY2VzcyBQMyBzdGFydGVkLlxuIik7CiAgIAogICAgcHJpbnRmKCJQcm9jZXNzIFAzIGZpbmlzaGVkLlxuIik7Cn0KIAp2b2lkIFA0KCkgewogICAgcHJpbnRmKCJQcm9jZXNzIFA0IHN0YXJ0ZWQuXG4iKTsKICAgCiAgICBwcmludGYoIlByb2Nlc3MgUDQgZmluaXNoZWQuXG4iKTsKfQogCnZvaWQgUDUoKSB7CiAgICBwcmludGYoIlByb2Nlc3MgUDUgc3RhcnRlZC5cbiIpOwoKICAgIHByaW50ZigiUHJvY2VzcyBQNSBmaW5pc2hlZC5cbiIpOwp9CiAKIAppbnQgbWFpbigpIHsKICAgIFAwKCk7CiAgICByZXR1cm4gMDsKfQ==