我想在C中实现一个简单的shell,并且我的程序正在导致无限循环并创建大量新进程/在用户有机会之前打印Myshell>输入任何命令。我似乎无法找到一种方法来防止这种情况发生,如果任何人都能帮上忙,那就太棒了!当你不未定义行为简单的shell实现与Linux中的C,导致无限循环的叉
” - (你不是因为你是读命令到使用与fgets缓冲区,但不是通过命令行参数,所以argv[argc]为argc > 1是错贴在上面
int main(int argc, char *argv[]){
char buffer[512];
int *status;
size_t nargs;
pid_t pid;
char delim[] = "\n";
while(1){
pid = fork();
if(pid){
printf("Myshell> ");
fgets(buffer, 512, stdin);
//parse(buffer, argv);
argv[0] = strtok(buffer, delim);
for(argc=1; argv[argc-1]; argc++){
argv[argc] = strtok(NULL, delim);
}
if(!strcmp(argv[0], "exit"))
exit(0);
printf("Waiting for child (%d)\n", pid);
pid = wait(status);
printf("Child (%d) finished\n", pid);
exit(0);
}else{
if(execvp(argv[0], argv)){
printf("error");
exit(1);
}else{
exit(0);
}
}
}
return 0;
}
+0
您需要在读取命令后分叉,而不是在读取命令的循环中。 –