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()等待子進程結束。

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