Linux父进程对于子进程的异步等待

父进程为什么等待子进程

  
  Linux中,存在多进程、多线程的服务。


  进程是如何产生、如何消失的?


  首先,打开Linux虚拟机或者系统的时候,系统自己建立一个init进程,这是Linux系统的基础进程,然后init进程再根据一些配置文件决定创建哪些进程,或者我们在终端自己创建一个新进程的时候,如果你有时间,你可以一直追查这个进程的祖祖辈辈,你会发现,他们都指向一个进程,那就是init进程。所以,可以这么说,Linux系统服务中,所有进程都是init的子孙进程。所以,进程的创建是通过创建子进程一个一个实现的。
  但是,一味的创建进程,而不对进程进行合理的管理,必然会造成操作系统的冗余,长时间下来,因为无用进程过多,系统将会崩溃。因为每个进程需要对自己维护一个PCB的结构体,来描述一个进程所有可能用到的资源、标志…所以,这个结构体并不小,且每个进程都自己私有一个,所以对无用进程的PCB管理是很有必要的。
  操作系统把无用或退出进程的PCB管理交给了他的父进程,每个拥有子进程的父进程函数体中都有一个等待操作,需要对他创建的子进程进行管理,毕竟,父亲管儿子天经地义嘛!所以,父进程在执行完自己的所有操作后,会以阻塞或者轮询的方式等待子进程的退出,收到子进程的退出数据之后,通过一定的手段,对子进程的PCB进行资源的释放。
  根据之前的认识,可能一下子就会想到两个函数
  

       #include 
       #include 

       pid_t wait(int *status);

       pid_t waitpid(pid_t pid, int *status, int options);

  这两个函数是父进程对子进程的等待函数,成功的返回值都是子进程的pid,直到收到这个pid,系统就会对这个pid对应的PCB进行回收,资源的释放的等操作,保证系统的效率。
  

wait和waitpid的区别与相同之处

wait

       #include 
       #include 

       pid_t 

你可能感兴趣的:(Linux,linux,父进程对子进程的异步,wait,waitpid)