C wait()确实有效

时间:2015-10-01 05:13:05

标签: c

我被要求在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
|

1 个答案:

答案 0 :(得分:-3)

来自评论的AS显然exec用新图像替换进程的内存然后你无法在exec之后等待子进程。我的理由是execvp如果成功则不会返回。而是使用system()您可以获得孩子的状态。只需检查wait()的返回值,它必须为-1。