Chinaunix首页 | 论坛 | 博客
  • 博客访问: 731952
  • 博文数量: 741
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-18 11:18
文章分类

全部博文(741)

文章存档

2011年(1)

2008年(740)

我的朋友

分类:

2008-09-18 11:24:48

引用:
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=3912 $?=0]
; cat foo.c

#include
#include
#include
#include
#include

int
main(int argc, char *argv[])
{
    int pid_max = 0;
    int pid;
    int cnt = 0;
    bool wrapped = false;
    FILE * fp;

    fp = fopen("/proc/sys/kernel/pid_max", "r");
    if (! fp) {
        exit(1);
    }

    fscanf(fp, "%d", &pid_max);
    fclose(fp);

    if (! pid_max) {
        exit(2);
    }

    while (1) {
        pid = fork();
        if (pid > 0) {
            /* parent */

            if (pid > pid_max - 5 || wrapped) {
                printf("pid = %d\n", pid);
            }

            if (wrapped && ++cnt >= 5) {
                exit(0);
            }

            if (pid == pid_max - 1) {
                wrapped = true;
            }

            wait(NULL);
        } else if (! pid) {
            /* child */
            exit(0);
        } else {
            /* error */
            exit(3);
        }
    }

    return 0;
}
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=3912 $?=0]
; gcc foo.c
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=3912 $?=0]
; ./a.out
pid = 32764
pid = 32765
pid = 32766
pid = 32767
pid = 300
pid = 301
pid = 302
pid = 303
pid = 304
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=3912 $?=0]
; bye

--------------------next---------------------

阅读(177) | 评论(0) | 转发(0) |
0

上一篇:2008-7-30 10:10

下一篇:2

给主人留下些什么吧!~~