该理论说,如果不调用等待,则父级不会获取有关终止子级的信息,并且子级将成为僵尸。但是当我们创建一个进程时,即使我们没有调用等待,也不会创建僵尸。我的问题是是否会自动调用等待?
问问题
312 次
1 回答
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()
清理僵尸。
于 2013-08-15T04:24:01.507 回答