我收到“无法分配内存”的可能原因是什么?分叉()时出错?
我正在用 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
}
其中路径是“bin/ls”和 args “ls”,NULL
主要看起来像
int main(){
while(1){
//read from keyboard
//find the program path
//fill args
execute(path,args);
}
}
I am creating a simple Unix shell in C. I use the fork() to clone the process and exec to execute a new one. It works fine when you are inputting data for the first time in the shell. But when it comes the second iteration fork returns -1.
e.g
...>ls -l /
/results here/
...>ls -l /
forking failed
here is a part of the code:
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
}
where path is "bin/ls" and args "ls",NULL
the main is looks like
int main(){
while(1){
//read from keyboard
//find the program path
//fill args
execute(path,args);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
将您的第一个
if
分支更改为:这将告诉您出了什么问题。
Change your first
if
branch to this:This will tell you what went wrong.