这是我困惑的代码。
#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'。
有人可以给我一个答案吗?非常感谢!!
答案 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);
}