[英]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.