2013-01-07 15 views
8

Chcę wykonać proces potomny w perlu. Chciałbym również, aby mój kod był niezależny od platformy (tak samo dla Windows jak i dla systemu Unix, z wyjątkiem niektórych błędów, takich jak plik etc).implementacja widelca w perlu

Problemem jest implementacja perl widelca w oknach, to pseudo proces, właściwie wątek. Proszę zapoznać się z emulacją widełek perl dla Windows here.

Podano także o problemach z wykonywaniem poleceń pseudoprocesowych pod numerami kill i exec. Czy korzystanie z dwóch różnych wersji widelca na różnych platformach byłoby bezpieczne, czy powinienem używać interfejsów API specyficznych dla systemu operacyjnego?

Odpowiedz

4

Zakładając, że wymagane są procesy asynchroniczne, przejdź do interfejsów API specyficznych dla platformy (jeśli możesz poczekać na dziecko, możesz użyć system lub qx).

To jest fork/exec w systemie UNIX, Win32::Process::Create w systemie Windows. Emulacja wideł w Windowsie była odważną próbą, ale platformy są tak różne w tym obszarze, myślę, że jesteś na luźniejszej próbie stworzenia przenośnego rozwiązania, które zaznacza wszystkie pola.

Przykład: python próbował ujednolicić interfejsy z ich modułem subprocess. Działa na proste rzeczy, ale są 4 specyficzne dla UNIXa i 2 parametry specyficzne dla Windowsa (do Popena).

5

Forks::Super już martwi i rozwiązuje wiele z tych problemów przenośności, co pozwala przenośnie uruchomić kod jak

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) 
}