【发布时间】:2011-11-07 01:11:20
【问题描述】:
我正在用 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”,参数为“ls”,NULL
主要是看起来像
int main(){
while(1){
//read from keyboard
//find the program path
//fill args
execute(path,args);
}
}
【问题讨论】:
-
查阅 errno 和 fork(2) 手册页。这不属于这里。
-
ls命令通常是内置的,但您的问题暗示它是您编写的导致问题的 c 程序。澄清一下? -
我已经咨询过了。@tchrist