2011-02-02 11 views
6

क्या WAMP में pcntl_fork काम करने का कोई तरीका है? मुझे एक फोर्किंग समाधान विकसित करने और इसे स्थानीय रूप से परीक्षण करने की आवश्यकता है।WAMP और pcntl_fork

+1

आप चलाने/Cygwin, जहां pcntl अधिक कार्य करने की संभावना है के तहत यह संकलन करने की कोशिश कर सकते। अन्यथा यदि आप हिम्मत करते हैं तो आप w32api एक्सटेंशन के माध्यम से कुछ हस्तशिल्प कर सकते हैं (और यदि यह अभी भी उपलब्ध है)। – mario

उत्तर

10

नहीं, यह संभव नहीं है। PCNTL एक्सटेंशन के लिए * निक्स प्लेटफॉर्म की आवश्यकता है।

अब, इसके साथ, आप क्या करने की कोशिश कर रहे हैं, और क्या आप इसे बिना फिक्र किए हल कर सकते हैं ...?

संपादित करें: पृष्ठभूमि प्रक्रियाओं को शुरू करने के लिए कुछ विकल्प:

  • यूनिक्स/लिनक्स:

    exec('nohup php yourscript.php > /dev/null 2>&1 &'); 
    
  • विंडोज;

    $com = new Com('WScript.shell'); 
    $com->run('php yourscript.php', 10, false); 
    

    तर्क पर दस्तावेज़ीकरण के लिए, देखें: http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspx

+1

मुझे समवर्ती प्रक्रियाओं को चलाने की आवश्यकता है। मैं cron (और चल रही प्रक्रियाओं की संख्या का प्रबंधन करने के लिए डीबी का उपयोग कर लागू कर सकते हैं) का उपयोग कर कार्यान्वित कर सकते हैं। हालांकि, मैं कहता हूं कि मैं 10 समवर्ती प्रक्रियाओं को चलाना चाहता हूं, मुझे 10 मिनट की एक विशेष स्क्रिप्ट को कॉल करने के लिए क्रॉन की आवश्यकता होगी - 1 मिनट की वृद्धि में - सभी 10 स्क्रिप्ट चलने के लिए (अर्थात्, यह 10 मिनट पहले पूरा होगा मुझे समवर्ती स्क्रिप्ट की वांछित संख्या मिलती है)। वैकल्पिक रूप से, मेरे पास "डमी" फ़ंक्शंस एक ही स्क्रिप्ट को कॉल कर सकते हैं (उदा। Foo_1 कॉल foo, foo_2 कॉल foo, आदि) और क्रॉन कॉल foo_1, foo_2, आदि हर मिनट है। Kludgy लगता है। – StackOverflowNewbie

+1

@Stack: ठीक है, पृष्ठभूमि कार्यों को लॉन्च करने के एक से अधिक तरीके हैं। आप प्रक्रियाओं को डिस्कनेक्ट करने के लिए लिनक्स पर 'नोहुप' और '&' का उपयोग कर सकते हैं, या एक COM WScript: http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspx ऑब्जेक्ट पृष्ठभूमि कार्यों को लॉन्च करें ... – ircmaxell

+0

@ स्टैक: उत्तर – ircmaxell

-1

छद्म कोड समाधान:

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

यह पहले से ही उत्तर दिया गया है, लेकिन मैं मैं अपने 2p जोड़ना होगा सोचा ।

आप साइगविन का उपयोग कर विंडोज़ में php के साथ pcntl-fork हो सकते हैं।

यह स्थापित करने के लिए एक वास्तविक दर्द है, लेकिन अगर मुझे पसंद है तो आप सिर्फ एक php cli स्क्रिप्ट चलाने के लिए चाहते हैं, यह आपकी सबसे अच्छी शर्त है।

मैं here से निर्देश मिला:

संबंधित मुद्दे