我收到“无法分配内存”的可能原因是什么?分叉()时出错?

发布于 2024-12-14 04:02:36 字数 686 浏览 1 评论 0原文

我正在用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅黛梨妆こ 2024-12-21 04:02:36

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

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

这将告诉您出了什么问题。

Change your first if branch to this:

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

This will tell you what went wrong.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文