在forking()中出现“无法分配内存”错误的原因可能是什么?

时间:2011-11-07 01:11:21

标签: c shell unix fork

我在C中创建一个简单的Unix shell。我使用fork()来克隆进程,并使用exec来执行一个新的。当您第一次在shell中输入数据时,它可以正常工作。但是当它到来时,第二个迭代fork返回-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”和args“ls”,NULL

主要看起来像

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

1 个答案:

答案 0 :(得分:3)

将您的第一个if分支更改为:

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

这会告诉你出了什么问题。