理论说,如果等不被称为父母将不会得到关于被终止的孩子和孩子的信息变成僵尸。但是当我们创建一个进程时,即使我们没有调用wait,也不会创建僵尸。我的问题是是否自动调用等待?
答案 0 :(得分:0)
在许多语言中,调用子流程会为您调用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
的父级,这将永远叫wait()
来清理僵尸。