2013-01-07 34 views
8

我想在perl中執行一個子進程。我也希望我的代碼能夠獨立於平臺(對於windows和unix一樣,除了filepath等一些小故障外)。perl中的fork實現

問題是perl在windows中的實現,是一個僞進程,實際上是一個線程。請參考windows here的perl fork仿真。

它還提到在執行僞進程的killexec命令時遇到的問題。對於不同的平臺使用兩個不同版本的fork是否安全?還是應該使用特定於OS的API?

回答

4

假設您需要異步進程,請參閱特定於平臺的API(如果您可以等待孩子,則可以使用systemqx)。

這就是在UNIX上的fork/exec,在Windows上的。 Windows上的fork仿真是一個勇敢的嘗試,但是這個平臺在這個領域是如此不同,我認爲你試圖製作一個可移動的解決方案來打開所有的盒子。

例如:python試圖統一與他們的subprocess模塊接口。它適用於簡單的東西,但有4個UNIX特定參數和2個Windows特定參數(對Popen)。

5

Forks::Super已經擔心,並解決了很多這樣的便攜性的擔憂,讓你可移植運行像

use Forks::Super; 

$pid = fork(); 
if ($pid != 0) { 
    ... 
    if (kill 'ZERO',$pid) { print "Job is running.\n"; } 
    kill 'STOP', $pid; # or $pid->suspend 
    kill 'CONT', $pid; # or $pid->resume 
    kill 'TERM', $pid; # or $pid->terminate 
    waitpid $pid, 0; # or $pid->wait or $pid->waitpid(0) 
} 
代碼