繁体   English   中英

使用等待系统调用时

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM