По каким возможным причинам я получаю сообщение об ошибке «Не удается выделить память» при использовании forking ()? - PullRequest
0 голосов
/ 07 ноября 2011

Я создаю простую оболочку Unix на C. Я использую fork () для клонирования процесса и exec для выполнения нового. Он отлично работает, когда вы вводите данные впервые в оболочке. Но когда он приходит, вторая итерационная вилка возвращает -1.

например,

...> ls -l /

/ результаты здесь /

...> ls -l /

неудачное разветвление

часть кода:

int execute(char path[80],char *args[]){
pid_t pid;
if((pid=fork())<0){
 printf("forking failed"); // The forking failed due to Cannot allocate memory error
 exit(0);
}else if(pid==0){
 execv(path,args);
}else{
 wait(NULL);
}
return 0
}

где path это "bin / ls" и аргументы "ls", NULL

главное выглядит

int main(){
 while(1){
 //read from keyboard
 //find the program path
 //fill args
 execute(path,args);
 }
}

1 Ответ

3 голосов
/ 07 ноября 2011

Измените свою первую if ветку на эту:

if((pid=fork())<0){
 perror("forking failed");
 exit(0);
}

Это скажет вам, что пошло не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...