2013-01-07 40 views
8

Tôi muốn thực hiện quy trình con trong perl. Tôi cũng muốn mã của tôi được nền tảng độc lập (tương tự cho các cửa sổ cũng như unix, ngoại trừ một số trục trặc như filepath vv).thực hiện ngã ba trong perl

Vấn đề là thực hiện perl ngã ba trong cửa sổ, là một quá trình giả, thực sự là một chủ đề. Vui lòng tham khảo giả lập perl fork cho windows here.

Nó cũng đề cập đến các sự cố khi thực hiện các lệnh killexec trên các quy trình giả. Có an toàn khi sử dụng hai phiên bản khác nhau của ngã ba cho các nền tảng khác nhau hay tôi nên đi với API cụ thể của hệ điều hành?

Trả lời

4

Giả sử bạn yêu cầu các quy trình không đồng bộ, hãy chuyển đến API nền tảng cụ thể (nếu bạn có thể đợi đứa trẻ thì bạn có thể sử dụng system hoặc qx).

Đó là fork/exec trên UNIX, Win32::Process::Create trên Windows. Các mô phỏng fork trên Windows là một thử thách dũng cảm, nhưng các nền tảng rất khác nhau trong lĩnh vực này, tôi nghĩ rằng bạn đang trên một looser cố gắng để sản xuất một giải pháp di động mà ticks tất cả các hộp.

Ví dụ: python cố gắng hợp nhất các giao diện với mô-đun subprocess của chúng. Nó hoạt động cho các công cụ đơn giản, nhưng có 4 thông số cụ thể của UNIX và 2 Windows (để Popen).

5

Forks::Super đã lo lắng về và giải quyết rất nhiều những mối lo ngại tính di động, cho phép bạn portably chạy mã như

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) 
} 
Các vấn đề liên quan