0

该理论说,如果不调用等待,则父级不会获取有关终止子级的信息,并且子级将成为僵尸。但是当我们创建一个进程时,即使我们没有调用等待,也不会创建僵尸。我的问题是是否会自动调用等待?

4

1 回答 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 回答