我被要求在C中模拟Unix shell,代码部分如下:
int pid, argc=0;
should_wait=0;
argc = makeargv(buffer,args);
if(argc!=0)
if(strcmp(args[argc-1],"&")==0){
args[argc-1]=NULL;
should_wait=1;
}
if(argc!=0)
if((pid=fork())==0){
execvp(args[0],&args[0]);
exit(1);
}
if(should_wait){
printf("parent here\n");
wait(NULL);
printf("Child complete\n");
}
父进程假设等待&
后面的输入参数等待子进程
例如:父等待子进入ls &
,父等待子进入`ls。但是,输出是:
osh> ls&
父母在这里
儿童完成
osh> a.out
argv.c myshell.c
|
答案 0 :(得分:-3)
来自评论的AS显然exec用新图像替换进程的内存然后你无法在exec之后等待子进程。我的理由是execvp
如果成功则不会返回。而是使用system()
您可以获得孩子的状态。只需检查wait()的返回值,它必须为-1。