叉子的Pid不是0或小于0(minix)

时间:2014-12-26 19:13:04

标签: c move execvp minix

我正在编写一个C程序,我需要在代码中间复制一些目录。所以我写了这个函数,我尝试使用fork然后使用execvp。但是这段代码似乎没有输入pid == 0,也不低于0。有什么不对?如果重要,我会使用minix

    void execCopy() {
    printf("I'm in execCopy\n");
    printf("ERROR 0: %s\n",strerror(errno));


    int pid = fork();

    if(pid < 0) {
        printf ("fork failed with error code= %d\n", pid);
        fprintf(stderr,"FORK error\n");
    }

    printf("ERROR 1: %s\n",strerror(errno));

    char *execArgs[] = { "cpdir", "-R", copy_path,paste_path, NULL };

    printf("Copy from %s to %s\n",copy_path,paste_path);

    if(pid == 0) {

        printf("I'm gonna exec\n");
        execvp("cpdir", execArgs);
        printf("I should never get here \n");

    }

    else {
        printf("I'm the father, going to return\n");
        printf("ERROR 2: %s\n",strerror(errno));

        return;
    }
}

输出

Dec 26 20:34:11 192 kernel: I'm in execCopy
Dec 26 20:34:11 192 kernel: ERROR 0: Not a directory
Dec 26 20:34:11 192 kernel: ERROR 1: Not a directory
Dec 26 20:34:11 192 kernel: Copy from /./home to /./home/lcom
Dec 26 20:34:11 192 kernel: I'm the father, going to return
Dec 26 20:34:11 192 kernel: ERROR 2: Not a directory

1 个答案:

答案 0 :(得分:2)

输出缓冲可能会吞噬子进程输出。在exec之前尝试fflush(stdout)

编辑:在fork之后,你应该看到两行ERROR 1和两行。您没有看到任何子进程输出。