Python中的ppid

  • os.getpid()   返回进程pid

  • os.getppid()  返回父进程pid

   子进程返回0,父进程中返回子进程的pid.

————————————————————————————————————————————————————————

僵尸进程:                            

 

  若子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。

 

有什么坏处? 如果大量的产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

 

 僵尸进程的避免:

  1. 父进程通过os.wait()和os.waitpid()等函数等待子进程结束,这会导致父进程挂起。
  2. 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父进程会收到该信号,可以在handler中调用wait回收。
  3. 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD,SIG_IGN) 通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送信号。
  4. 还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收 还要自己做。

      子进程变成僵尸进程,是因为父进程先执行完,没有等待子进程结束。而wait()并不是用来等待子进程结束的,只是防止父进程先于子进程退出;如果父进程先退出,会使子进程成为僵尸进程,这时候子进程结束的时候就由1号init进程来回收。

主进程通过调用os.wait()等待子进程结束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章