2011-02-02 36 views
6

Có cách nào để thực hiện công việc pcntl_fork trong WAMP không? Tôi cần phải phát triển một giải pháp forking và thử nghiệm nó tại địa phương.WAMP và pcntl_fork

+1

Bạn có thể thử chạy/biên dịch nó dưới Cygwin, trong đó pcntl có nhiều khả năng hoạt động hơn. Khác bạn có thể thủ công một cái gì đó thông qua phần mở rộng w32api nếu bạn dám (và nếu đó vẫn còn có sẵn). – mario

Trả lời

10

Không, không thể. Phần mở rộng PCNTL yêu cầu * nền tảng nix.

Bây giờ, với điều đó đã nói, bạn đang cố gắng làm gì, và bạn có thể giải quyết nó mà không bị nghẹt thở ...?

Edit: Một số lựa chọn thay thế cho quá trình nền tung ra:

+1

Tôi cần phải có quá trình đồng thời chạy. Tôi có thể thực hiện bằng cách sử dụng cron (và sử dụng DB để quản lý số lượng các tiến trình đang chạy). Tuy nhiên, nói rằng tôi muốn 10 tiến trình đồng thời chạy, tôi sẽ cần cron để gọi một tập lệnh cụ thể 10 lần - trong khoảng tăng 1 phút - để có được tất cả 10 tập lệnh đang chạy (nghĩa là, sẽ mất 10 phút trước khi Tôi nhận được số lượng kịch bản đồng thời mong muốn). Ngoài ra, tôi có thể có chức năng "giả" gọi cùng một tập lệnh (ví dụ: foo_1 cuộc gọi foo, foo_2 cuộc gọi foo, v.v.) và có cuộc gọi cron foo_1, foo_2, v.v. mỗi phút. Có vẻ như kludgy. – StackOverflowNewbie

+1

@Stack: Vâng, có nhiều cách để khởi chạy các tác vụ nền. Bạn có thể sử dụng 'nohup' và' & 'trên Linux để ngắt kết nối các quá trình, hoặc một COM WScript: http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspx đối tượng khởi chạy tác vụ nền ... – ircmaxell

+0

@Stack: đã chỉnh sửa câu trả lời – ircmaxell

-1

pseudo-code:

while (TRUE) 
{ 
    $process_limit = get_process_limit(); 
    $process_count = get_process_count(); 

    if process count < process limit: 
    { 
     // get_row returns a row (as an array) from the DB that needs to be processed 
     $row = get_row(); 
     if($row === array()) 
     { 
     // Nothing to process; sleep 
     sleep(2); 
     } 
     else 
     { 
     // Process row 
     process_count(+1); 
     process_row($row); 
     process_count(-1); 
     } 

    } 
    elseif process count === process limit 
    { 
     // Do not add to the process 
     exit; 
    } 
    elseif process count > process limit 
    { 
     // Means the process limit was decreased 
     // Terminate this process instance 
     process_count(-1); 
     exit; 
    } 
} 
-1

này đã được trả lời nhưng tôi nghĩ tôi sẽ thêm 2p của tôi .

Bạn có thể có pcntl-fork với php trong cửa sổ bằng cách sử dụng Cygwin.

Đó là một nỗi đau thực sự để cài đặt, nhưng nếu như tôi bạn chỉ muốn một kịch bản php cli để chạy, đó là đặt cược tốt nhất của bạn.

Tôi nhận được hướng dẫn từ here:

Các vấn đề liên quan