[学习记录]fork压力测试程序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <unistd.h>
#include<errno.h>

void LoopFunc(int);

int main(void)
{
    int procNum = 0;
    int loopNum = 0;
    int i, j;
    pid_t pid;
    
    printf("请输入要运行的进程数");
    scanf("%d", &procNum);
    printf("请输入每个进程运行圈数");
    scanf("%d", &loopNum);
    
    for(i = 0; i < procNum; ++i)
    {
        pid = fork();
    
        if (-1 == pid)
        {
            perror("fork err");
            return 0;
        }
        if (pid > 0)
        {
            ;
        }
        if (0 == pid)
        {
            for(j = 0; j < loopNum; ++j)
            {
                LoopFunc(j + 1);
            }
            return 0;
        }
    }
    
    
    printf("over!\n");
    
    return 0;
}

void LoopFunc(int num)
{
    printf("LoopFunc......%d\n", num);
    return;
}

/*
------------
每次循环后子进程结束不参与下一次fork,父进程继续上去生孩子.
父进程和子进程都是同时执行,父进程生完孩子就继续往下走.孩子自己执行自己的事情,
所以最后一句话printf("over!\n");可能出现在输出语句的任何位置这无关紧要.

如果让父进程不参与下一次fork而由孩子来参与下一次fork则形成2种不同的创建形态

父进程参与下一次fork形成深度为一的树一样的形状(一个爸爸,多个孩子)
子进程参与下一次fork形成链表一样形状(孩子生孩子)
------------
*/

 

posted @ 2015-04-15 15:12  张仕传  阅读(256)  评论(0编辑  收藏  举报