возвращаемое значение дочернего процесса

Я новичок в fork а также execи я попробовал следующую программу.

Программа 1:

int main(int argc, char *argv[]){
pid_t pid;
int status;
pid = fork();
if(pid == 0){
printf("new process");
execv("p1",argv);
}
else{
pid_t pr = wait(&status);// I am trying to get the exit value
//  of the sub process.
printf("the child process exit with %d",status);
printf("father still running\n");
}
}

Программа 2:

int main(){
std::cout<<"I am the new thread"<<std::endl;
sleep(1);
std::cout<<"after 1 second"<<std::endl;
exit(1);
}

Я запускаю первую программу, и вывод «выход дочернего процесса с 256». Почему результат 256 вместо 1? Если я изменю exit(1) в exit(2), результат становится 512, это почему? Это сработало только если я верну 0.

1

Решение

Значение статуса, которое вы получаете от wait Системный вызов не обязательно является тем, с чем завершился ваш дочерний процесс.

Существует также ряд других частей информации, которые могут быть возвращены, например:

  • процесс завершился нормально?
  • это было прекращено сигналом?
  • что это был за сигнал?
  • это дамп ядро?

Чтобы извлечь код выхода, вы используете макрос:

WEXITSTATUS(status)

Это и макросы, которые могут дать вам больше информации, должны быть доступны на wait man-страница, такая как Вот.

3

Другие решения


По вопросам рекламы [email protected]