分类:
2008-09-18 11:24:49
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=3912 $?=0] ; cat foo.c
#include-(dearvoid@LinuxEden:Forum)-(~/tmp)-
#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;
}
[$$=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