日期:2014-05-16  浏览次数:20642 次

Linux的子父进程
在Linux中子父进程怎么区分?如
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int z=0;
int main(){
  int *a = 0;
  pid_t = pid;
  if((pid=for`k())){
  a = (int*)malloc(100*sizeof(int));
  z = pid;
  printf("z1=%d\n",z);
  }
  else{
   a = &z;
   *a=pid;
   printf("z2=%d\n"z);

  }

printf("pid=%d\n"pid);
return 0;
}
上诉代码的子进程是什么,父进程是什么,有什么关系????

------解决方案--------------------
pid==0的是子进程,不是0,是父进程。
调用fork的时候,linux内核开始采用copy on write 技术,产生新的进程,同时fork函数,在父进程和子进程各自返回值,父进程返回子进程的pid,子进程返回0,使用其实从fork开始,你的上述代码分别到了2个进程执行。
也就是说if分支,在主进程,else分支在子进程。

------解决方案--------------------
用fork创建子进程;在子进程中 pid 是为0的;而返回到 父进程中的PID的值是一个正数。
一般用 if((pid=fork())==0)判断子进程。
你的程序if 为真 就是子进程了;else 就是父进程。