【问题标题】:When wait system call is used使用等待系统调用时
【发布时间】:2013-08-15 03:41:51
【问题描述】:

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

【问题讨论】:

标签: linux wait system-calls


【解决方案1】:

在许多语言中,调用子进程将为您调用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() 来清理僵尸。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多