2013-07-05 33 views
1

据我所知(原谅我对这个课题的无知),当一个进程fork() S:何时发布PID?

  • 每个孩子被分配到自己的PID
  • 孩子已经退出之后,父仍然能够与waitpid()

查询孩子的PID这是否意味着:

  • 因为这个PID仍然是 “可查询” FR ü父母,它仍然被锁定,不能被系统重复使用?
  • 或者是与父系关联的数字,以便它可以知道它已退出,并获取退出状态代码,但是并行地,系统可以再次使用PID?在这种情况下,这是否意味着该PID不能用于该父级的子进程?这意味着父母在其一生中可以跨越的进程数量有一个上限,这对我来说是令人惊讶的。

如果您能为我澄清,我将不胜感激!

回答

3

在大多数UNIX上,除非父节点另有特殊要求,否则直到它等待子节点为止,子进程仍作为僵尸进程存在于系统进程表中。所以PID不能被重新使用。

+0

啊,这很有道理! 'waitpid()'是释放PID的唯一方法吗?这是否意味着它只能被调用一次,或者它会在第二次调用时返回不正确的信息? – Benjamin

+0

这不是唯一的方法。你也可以使用'wait'。你也可以终止,让你的父母在你(你的孩子变成你的父母继承的孤儿)之后清理干净。此外,大多数UNIX有一些方法来请求系统自动收获僵尸,通常忽略SIGCHLD。第二次电话获得正确的信息,但不同。很有可能会被告知PID不再存在。 –

+0

好吧,所以如果我想获得退出状态代码,我只需做一次修改即可获得它? – Benjamin