मैं Windows एक पर्ल स्क्रिप्ट है कि एक निष्पादन कॉल चल रहा है में हूँ बाहर निकलने नहीं दुभाषिया:पर्ल कमांड लाइन
$command = "$path_to_exe -i $dir -o $results";
my $pid = fork();
if (!$pid) {
system($command);
#do stuff
} else {
#do stuff
}
print "Exiting..."
exit;
इसके बजाय के बाद बाहर निकलने की, perl.exe सिर्फ idles। एक पॉप-अप तो मुझे बताता है कि "पर्ल कमांड लाइन दुभाषिया ने काम करना बंद कर दिया है।"
मैं Windows में प्रक्रिया प्रबंधन के बारे में बहुत ज्यादा नहीं पता है, और मैं इस मंच कि यह fork()
और exec()
उपयोग करने के लिए अच्छा अभ्यास नहीं है पर पहले से पढ़ लिया है, लेकिन कोड दुभाषिया के अलावा अच्छी तरह से काम करता है भाग को बंद नहीं। मैंने यूनिक्स में प्रोग्राम को लागू करने की कोशिश करने से सबकुछ करने की कोशिश की है (जो एक ही त्रुटि देता है) Win32::Process
कमांड का उपयोग करने के लिए - लेकिन कुछ भी काम नहीं करता है। मुझे उम्मीद थी कि एक आसान समाधान हो सकता है जो मुझे पहले से लिखे गए कार्यों को संरक्षित करने की अनुमति देगा।
अगर कोई यह बता सकता है कि यह कोड चलाए जाने पर विंडोज में वास्तव में क्या हो रहा है, तो यह भी मददगार होगा!
कांटा-कार्यकारी जीत पर अच्छा अभ्यास है, क्योंकि जीत इसे करने के लिए अनुकूल नहीं है नहीं है। विन भारी थ्रेडिंग और स्थानीय आरपीसी अनुकूलित करने के लिए है। लेकिन आपके मामले में यह वास्तविक समस्या नहीं है, क्योंकि आपके लिए वास्तव में महत्वपूर्ण नहीं है, कि आपकी रैपर स्क्रिप्ट 0.001s या 0.01s ओवरहेड उत्पन्न करती है। यह केवल महत्वपूर्ण था, यदि आपके उदाहरण के लिए डेटाबेस सर्वर डिमन या कुछ ऐसा था जिसे प्रति सेकंड हजार बार कहा जाना चाहिए। एक और बात, कि हाँ, कांटा() - exec() धीमा है, लेकिन कांटा() - सिस्टम() भी धीमा है ... मैं आगे देखता हूं, कि आपने मेरी दूसरी समस्या ($ pid और $$ नहीं)। आपको सहकारी होना चाहिए। – peterh