当我在下面运行我的代码并在提示符下键入“ls”时它在终端中运行ls但是然后只是坐在那里并且不再打印我的提示。如何获得控制权以返回父进程?
由于
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char* argv[]){
while(1){
print_the_prompt();
char user_text[100];
if( fgets(user_text, sizeof(user_text), stdin) != NULL ){
char* nl_char = strchr(user_text, '\n');
if( nl_char != NULL ){
*nl_char = '\0';
}
}
//printf("user_text = \"%s\"\n", user_text);
if( is_command_built_in(user_text) ){
//run built in command
}
else{
//run regular command
execute_new_command(user_text);
}
}
return 0;
}
void print_the_prompt(){
printf("!: ");
}
int is_command_built_in(char* command){
return 0;
}
void execute_new_command(char* command){
pid_t pID = fork();
if(pID == 0){
//is child
char* execv_arguments[] = { command, (char*)0 };
execvp(command, execv_arguments);
}
else{
//is parent
printf("im done");
}
}
答案 0 :(得分:1)
答案可能是父母在开始孩子之后立即打印“im done”(记住它是一个单独的进程,因此并行运行),然后循环回来打印提示之前孩子甚至开始列出文件。如果你向后滚动,你可能会找到你的下一个提示。
要让父母等待孩子完成,您必须使用wait()
系列函数之一。