windows - fork 时草莓 Perl 负子 pid

标签 windows perl fork strawberry-perl

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

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

最佳答案

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

关于windows - fork 时草莓 Perl 负子 pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33487223/

相关文章:

perl - 有没有办法为 App::cpanminus (cpanm) 配置默认镜像?

c - scanf from child 扫描任何 parent 已经扫描过的东西

创建一个新的瘦进程、 fork 还是线程?

java - 从 Java Web Start (JNLP) 修改 Windows 防火墙规则

c# - 我怎样才能制作一个按钮,将剪贴板上的内容粘贴到任何位置?

perl - 在 perl 中使用 xml::Libxml::Xpathcontext 解析具有多个命名空间的 xml

mysql - DBI 下批量事务 DELETE 导致 InnoDB 锁耗尽

windows - 如何使用 Perl 或任何其他语言找到 Windows x86-32 位上的确切物理内存量?

ruby-on-rails - Rails 应用程序无法识别 postgres gem

linux的fork和系统资源