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