2013-01-07 14 views
8

मैं पर्ल में एक बाल प्रक्रिया निष्पादित करना चाहता हूं। मैं यह भी चाहता हूं कि मेरा कोड प्लेटफार्म स्वतंत्र हो (विंडोज़ के साथ ही यूनिक्स के लिए, फाइलपैथ इत्यादि जैसे कुछ ग्लिच को छोड़कर)।परल कार्यान्वयन perl

समस्या विंडोज़ में कांटा के perl कार्यान्वयन है, एक छद्म प्रक्रिया है, वास्तव में एक धागा है। विंडोज here के लिए कृपया पर्ल फोर्क इम्यूलेशन देखें।

यह छद्म-प्रक्रियाओं पर kill और exec आदेशों को निष्पादित करने में समस्याओं के बारे में भी उल्लेख करता है। क्या विभिन्न प्लेटफ़ॉर्म के लिए कांटा के दो अलग-अलग संस्करणों का उपयोग करना सुरक्षित होगा या क्या मुझे ओएस विशिष्ट एपीआई के साथ जाना चाहिए?

उत्तर

4

मान लें कि आपको एसिंक्रोनस प्रक्रियाओं की आवश्यकता है, प्लेटफार्म विशिष्ट एपीआई के लिए जाएं (यदि आप बच्चे के लिए इंतजार कर सकते हैं तो आप system या qx का उपयोग कर सकते हैं)।

यह fork/exec यूनिक्स पर, Win32::Process::Create विंडोज पर है। विंडोज़ पर कांटा अनुकरण एक बहादुर प्रयास था, लेकिन प्लेटफॉर्म इस क्षेत्र में बहुत अलग हैं, मुझे लगता है कि आप एक पोर्टेबल समाधान का उत्पादन करने की कोशिश कर रहे हैं जो सभी बक्से लगाता है।

उदाहरण: पायथन ने subprocess मॉड्यूल के साथ इंटरफेस को एकजुट करने का प्रयास किया। यह साधारण सामान के लिए काम करता है, लेकिन 4 यूनिक्स विशिष्ट और 2 विंडोज विशिष्ट पैरामीटर (पॉपन के लिए) हैं।

5

Forks::Super पहले से ही के बारे में चिंता है और इन पोर्टेबिलिटी चिंताओं का एक बहुत संबोधित करते हैं, जिससे आप portably

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) 
} 
की तरह कोड को चलाने