【发布时间】:2009-09-23 18:13:47
【问题描述】:
您好,我正在开发一个 unix shell,我遇到了两个问题。我想知道你们中是否有人可以帮助我。我的第一个问题是 shell 没有等待子进程终止。我实际上可以在子进程运行时输入更多命令。我的第二个问题在于以下两行。我在 shell 上没有任何显示。
fprintf(stderr, "Process name is: %s\n", commandArgv[0]);
fprintf(stderr, "Child pid = %d\n", pid);
我有以下方法来执行用户输入的进程:即firefox、ls -a等
void execute(char *command[], char *file, int descriptor){
pid_t pid;
pid = fork();
if(pid == -1){
printf("error in execute has occurred\n");
}
if(pid == 0){
execvp(*command,command);
fprintf(stderr, "Process name is: %s\n", commandArgv[0]);
fprintf(stderr, "Child pid = %d\n", pid);
wait(&status);
exit(EXIT_SUCCESS);
}
else{
printf("ignore for now\n");
}
}
这是我调用执行命令的地方。它工作正常并启动一个进程,但它不会等待它完成。
execute(commandArgv, "STANDARD",0);
你们知道我做错了什么吗?谢谢,非常感谢您花时间帮助我。
【问题讨论】:
-
我在执行调用后移动了等待。效果很好。谢谢。
-
或者将其移至代码的“暂时忽略”部分,这是父级在子级被 fork()'d 后执行的操作。