簡體   English   中英

使用等待系統調用時

[英]When wait system call is used

該理論說,如果不叫等待,父母將不會獲得有關被終止的孩子的信息,而孩子會變成僵屍。 但是,當我們創建一個進程時,即使不調用wait,也不會創建僵屍。 我的問題是等待是否自動調用?

在許多語言中,調用子進程將為您調用wait() 例如,在ruby或perl中,您經常會像這樣剝殼:

#!/usr/bin/ruby
system("ls /tmp")
`ls /tmp`

這正在為您做很多事情,包括調用wait() 實際上,Ruby必須等待程序退出以收集輸出,然后程序才能繼續。

您可以輕松地創建如下僵屍:

#!/usr/bin/ruby
if fork
  sleep 1000 # Parent ignoring the child
else
  exec "ls /tmp" # short-lived child
end

當我們手動fork / exec時,沒有魔術為我們調用wait() ,並且將創建一個僵屍。 但是當父級退出時,僵屍子級將重新成為init的父級,而init始終會調用wait()來清理僵屍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM