对fork功能感到困惑

时间:2016-03-20 02:09:35

标签: c

这是我困惑的代码。

#include "csapp.h"
void doit()
{
    if ((fork) == 0) {
            fork();
            printf("hello\n");
            return;
    }
    return;
}

int main()
{
    doit();
    printf("hello\n");
    exit(0);
 }

我在MAC上运行这个程序,我只打印了一个hello。我认为应该有5行'hello',因为子进程返回父进程并打印一个'hello'。

有人可以给我一个答案吗?非常感谢!!

1 个答案:

答案 0 :(得分:2)

您没有调用fork(),而您只是将其地址与0进行了比较,这是一个空指针常量。

(fork) == 0获得真实的机会太少,因此在if语句被执行后,块内的内容将被执行。

致电fork()以创建子流程。

试试这个:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void doit(void)
{
    if (fork() == 0) {
        fork();
        printf("hello\n");
        return;
    }
    return;
}

int main(void)
{
    doit();
    printf("hello\n");
    exit(0);
}