如何实现系统调用分叉 ()



众所周知,在Linux中,每个进程都会调用fork()。它将返回 0 或 1 作为正常或 -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("parentn");
        else
            printf("childn");
        _exit (0);
    }

最新更新