如何实现系统调用fork()?

时间:2014-03-03 22:18:15

标签: fork system-calls

众所周知,每个进程都会在Linux中调用fork()。它将返回0或1正常或-1表示错误。但是,我不知道如何创建一个可以同时具有两个值的变量。你能给我点点滴滴来帮我实现吗?

1 个答案:

答案 0 :(得分:1)

没有一个变量有两个值。有两个变量,一个在父项中,一个在子项中,每个变量只有一个值。 fork调用返回两次。该过程就好像被复制一样。

如果您有兴趣了解fork的实施方式,建议您先查看实际实施情况。考虑:

bool is_child()
{
    pid_t pid = getpid();
    // some system call that returns twice (like 'clone')
    return (getpid() == pid);
}

这里有一个函数,其返回值取决于它返回的进程。如果您执行j = is_child();,则变量j将在父级false和子级中的true

这是一个完整的工作示例:

    #include <sys/types.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>

    bool my_fork()
    {
        pid_t pid = getpid();
        fork(); // we ignore the return value
        return pid == getpid();
    }

    int main(void)
    {
        bool j = my_fork();
        if (j)
            printf("parent\n");
        else
            printf("child\n");
        _exit (0);
    }