2015-11-02 51 views
0

所以我明白,Windows不支持Unix fork-exec模型,而是產生進程。但是,Strawberry Perl的fork仿真產生負PID的兒童。這些PID似乎是一致的,但我不明白爲什麼它們是否定的,或者真的,Perl如何模擬Unix分支。草莓Perl負面孩子PID分叉時

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 

回答

4

大部分的細節都在perlfork,但回答您的具體問題,在Windows僞過程對Perl實際上是作爲線程來實現。你應該把一個肯定的PID解釋爲原始線程的實際PID,而負的PID實際上是線程ID(當然是否定的)。

+0

「您應該將正PID解釋爲原始線程的實際PID,否定PID實際上是線程ID」這是否記錄在任何位置? – ThisSuitIsBlackNot

+0

我讀了perlfork,不知道負數是從哪裏來的,只有那些神祕的事情發生在用'wait',如果你得到一個僞pid爲-1 –

2

如果對fork(實際上是線程)創建的虛擬進程使用了​​正向PID,則它們可能與實際進程的PID衝突。