【问题标题】:Strawberry Perl negative child pid when forked分叉时的草莓 Perl 负子 pid
【发布时间】:2015-11-02 21:23:56
【问题描述】:

所以我知道 Windows 不支持 Unix fork-exec 模型,而是生成进程。然而,Strawberry Perl 的 fork 仿真会产生具有负 PID 的子代。这些 PID 似乎是一致的,但我不明白为什么它们是负数,或者实际上,Perl 是如何模拟 Unix fork 的。

use strict;
use warnings;

my $cpid = fork();

if ($cpid == 0) {
    printf "%s\n", "I'm the child, pid is $$";
} else {
    printf "%s\n", "I'm the parent, pid is $$, cpid is $cpid";
}

这会产生类似于:

I'm the parent, pid is 3428, cpid is -2600
I'm the child, pid is -2600

【问题讨论】:

    标签: windows perl fork strawberry-perl


    【解决方案1】:

    大部分细节都在perlfork 中,但为了回答您的具体问题,Windows 上的 Perl 伪进程实际上是作为线程实现的。您应该将正 PID 解释为原始线程的实际 PID,而负 PID 实际上是线程 ID(当然是否定的)。

    【讨论】:

    • “您应该将正 PID 解释为原始线程的实际 PID,而负 PID 实际上是线程 ID”这是否记录在任何地方?
    • 我读了 perlfork 并且不知道负数是从哪里来的,只有当你得到 -1 的伪 pid 时,wait 会发生神秘的事情
    【解决方案2】:

    如果fork(实际上是线程)创建的虚假进程使用正 PID,它们可能会与实际进程的 PID 冲突。

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 2011-12-14
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多