用fork()的子和父pid;
我正在尝试制作一个程序,使9个子进程,所以我只使用fork 9次,如果我们是父亲,像这样:
for (int i = 0; i 0) { child_pid = fork(); childs[i] = child_pid; } if (child_pid < 0) printf("Error...\n"); }
现在,我必须在每个孩子身上打印出他是什么孩子,从0开始,所以我在想这个:
printf("This is child #%d\n", getpid() - getppid());
但我不确定,这总是有效吗?如果父母创建子系统时操作系统会创建另一个进程,那么孩子的数量将会停止? 最后,如果答案是肯定的,我怎样才能让#n孩子知道他是儿童编号n?
您可以使用i
变量来判断您所在的孩子,但循环的逻辑是不正确的。 它应该是这样的:
for (int i = 0; i < 9; ++i) { child_pid = fork(); if (child_pid == 0) { // We are the child. The value of the i variable will tell us which one. // If i == 0 we are the first child, i == 1 and we are the second, and so on. printf("We are child #%d\n", i); exit(EXIT_SUCCESS); } if (child_pid < 0) { // Forking failed. perror("fork()"); exit(EXIT_FAILURE); } // Otherwise we are the parent and forking was successful; continue the loop. }
操作系统不需要按顺序分配进程ID。 如果另一个进程正在使用下一个进程,它将在顺序分配方法中跳过,但操作系统可以真正分配一个随机数作为pid,只要它没有被使用。