Мне дали этот стартовый код для проекта, но мне трудно понять, как выполняется дочерний процесс.
int pid ;
int child_info = -1;
if ( argv[0] == NULL ) /* nothing succeeds */
return 0;
if( (pid= fork()==-1)
perror("fork");
else if ( pid == 0 ){
signal(SIGINT, SIG_DFL);
signal(SIGQUIT, SIG_DFL);
execvp(argv[0], argv);
perror("cannot execute command");
exit(1);
}
else { //check if wait error or print out exit status
if ( wait(&child_info) == -1 )
perror("wait");
else {
printf("Exit status: %d, %d\n", child_info>>8, child_info&0377);
}
}
return child_info;
}
Глядя на код, текущий процесс разветвляется, и в этом случае дочерний процесс наследует все соответствующие свойства родительского процесса, поскольку в нем нет таймеров, сигналов или чего-либо еще. Однако значения pid новых процессов находятся в диапазоне 18000, так как можно выполнить execvp(argv[0], argv)
, поскольку в этом случае pid! = 0.