#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define NUM_CHILDREN 1000 findme(i) int i; { DIR * dir = NULL; struct dirent *d; int pid; int mypid; mypid = getpid(); if ((dir = opendir("/proc")) == (DIR *)0) { perror("failed to open /proc\n"); exit(1); } while((d = readdir(dir)) != (struct dirent *)0) { if ((pid = (pid_t)atoi(d->d_name)) == 0) continue; if (pid==mypid) return(1); } printf("\nfailed to find myself: pid %d, iteration %d\n",mypid,i); return(0); } fork_child(i) int i; { int pid; switch ((pid = fork())) { case 0: /* child */ sleep(1); findme(i); exit(0); ;; case -1: /* error */ perror("failed to fork\n"); exit(1); ;; default: /* parent */ ;; } } main() { int i; (void)signal(SIGCHLD, SIG_IGN); for (i=0; i