我想在perl中執行一個子進程。我也希望我的代碼能夠獨立於平臺(對於windows和unix一樣,除了filepath等一些小故障外)。perl中的fork實現
問題是perl在windows中的實現,是一個僞進程,實際上是一個線程。請參考windows here的perl fork仿真。
它還提到在執行僞進程的kill
和exec
命令時遇到的問題。對於不同的平臺使用兩個不同版本的fork是否安全?還是應該使用特定於OS的API?
我想在perl中執行一個子進程。我也希望我的代碼能夠獨立於平臺(對於windows和unix一樣,除了filepath等一些小故障外)。perl中的fork實現
問題是perl在windows中的實現,是一個僞進程,實際上是一個線程。請參考windows here的perl fork仿真。
它還提到在執行僞進程的kill
和exec
命令時遇到的問題。對於不同的平臺使用兩個不同版本的fork是否安全?還是應該使用特定於OS的API?
假設您需要異步進程,請參閱特定於平臺的API(如果您可以等待孩子,則可以使用system
或qx
)。
這就是在UNIX上的fork
/exec
,在Windows上的。 Windows上的fork仿真是一個勇敢的嘗試,但是這個平臺在這個領域是如此不同,我認爲你試圖製作一個可移動的解決方案來打開所有的盒子。
例如:python試圖統一與他們的subprocess
模塊接口。它適用於簡單的東西,但有4個UNIX特定參數和2個Windows特定參數(對Popen)。
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)
}
代碼