我在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);
}
}
答案 0 :(得分:3)
将您的第一个if
分支更改为:
if((pid=fork())<0){
perror("forking failed");
exit(0);
}
这会告诉你出了什么问题。