linux fork pid问题,大家帮帮忙,谢谢
程序代码:
#include<stdio.h> #include<unistd.h> #include<sys/types.h> int main() { pid_t fork_id; int i, j; printf("Do you want to create a new child process?(1:yes,2:no)\n"); scanf("%d",&i); if(i == 1) { fork_id = fork(); if(fork_id < 0) { printf("error!!!!\n"); } else if( fork_id == 0) { wait();/* 先等待子进程运行结束 */ printf("main:main pid is %d\n",getpid());/* 这里应该是输出main进程的pid */ } else { printf("child:fork_id is %d\n",fork_id);/* 这里是fork函数的返回值,子进程的pid */ printf("child:pid is %d\n",getpid());/* 这里应该也是输出子进程的pid */ printf("child:main pid is %d\n",getppid());/* 这里应该是输出父进程的pid,也就是main进程的pid */ //execl("/bin/ls","ls","/",NULL); } } /* 以上注释部分都是我的推测,但运行结果却不是这样的,fork_id的值不等于在else分支中getpid()得到的值,main进程id也不一样,为什么会这样呢? *child:fork_id is 4461 *child:pid is 4459 *child:main pid is 2828 *main:main pid is 4461 * */ else if(i == 2) { printf("this is 2\n"); } else { printf("the number of you enter is error!!!please enter again\n"); } return 0; }