#include #include #include #include #define SUCCESS 1 #define FAILURE 0 int parse_args( int argc, char *argv[], int *n ){ if( argc == 2 ){ *n = atoi( argv[1] ); if( n >= 0 ) return SUCCESS; } return FAILURE; } int main( int argc, char *argv[] ){ int i, n; pid_t childpid; if( !parse_args( argc, argv, &n ) ){ printf( "Usage: chainargs \n" ); exit(EXIT_FAILURE); } for (i = 1; i < n; ++i) if((childpid = fork()) < 0){ /* fork error */ perror("error in fork"); exit(EXIT_FAILURE); } else if(childpid){ /* parent code */ break; } else { /* child code */ } /* mutual code */ printf("This is process %ld with parent %ld\n", (long)getpid(), (long)getppid()); return 0; }