分叉时草莓Perl负面儿童pid

时间:2015-11-02 21:23:56

标签: windows perl fork strawberry-perl

所以我理解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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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