系统调用fork()

时间:2016-03-18 12:03:38

标签: unix

假设我们有这段代码:

int i;

for(i=0; i<3; i++){
    fork();
}
printf("Hello");
  1. 多少次&#34;你好&#34;会出现在屏幕上吗?
  2. 流程树:父母和孩子。
  3. 我认为应该打印&#34;你好&#34; 4次。

1 个答案:

答案 0 :(得分:2)

对于您创建的每个fork系统调用,您将创建当前进程的克隆。因此,您将调用fork函数3次,这将导致创建8个进程。计算结果为2³。

如果要打印消息“hello”4次,则需要将代码更改为:

int main()
{
        int i;

        for(i=0; i<2; i++){
                fork();
        }
        printf("Hello\n\n");
}

请注意,您拥有的代码将创建僵尸子进程。

使用此代码,你可以创建你想要的进程,让我们说4并让父亲等待它的孩子。

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>

int main(int argc, char *argv[]) 
{ 
        int pid, i;
        for(i=0; i<4; i++)
        {
                if ((pid = fork()) == -1) {
                        perror(argv[0]);
                        exit(1);
                }
                if (pid == 0) {
                        printf("\n\nHello\n\n");
                        exit(0);
                } else {
                        wait(NULL);
                }
        }
}