2012-02-28 28 views
14

मेरे डेबियन-आधारित मशीन पर आर के समांतर पैकेज का उपयोग करके मैंने कुछ समय के लिए खेला है, फिर भी मुझे गणना के बाद सभी ज़ोंबी बाल-प्रक्रियाओं को हटाने का कोई तरीका नहीं मिल रहा है।समांतर पैकेज का उपयोग कर ज़ोंबी प्रक्रियाओं को हटाएं

मैं एक सामान्य और ओएस स्वतंत्र समाधान की तलाश में हूं।

2 कोर के लिए समस्या को दर्शाता हुआ एक सरल स्क्रिप्ट नीचे

:

library(parallel) 
testfun <- function(){TRUE} 

cltype <- ifelse(.Platform$OS.type != "windows", "FORK", "PSOCK") 
cl <- makeCluster(2, type = cltype) 
p <- clusterCall(cl, testfun) 
stopCluster(cl) 

दुर्भाग्य से, इस स्क्रिप्ट प्रक्रिया तालिका अगर आर बंद हो जाता है जो केवल मारे में दो ज़ोंबी प्रक्रियाओं छोड़ देता है।

उत्तर

5

यह केवल "फोर्क" क्लस्टर के साथ एक मुद्दा प्रतीत होता है। यदि आप इसके बजाए "पीएसओकेके" क्लस्टर बनाते हैं, तो जब आप stopCluster(cl) पर कॉल करते हैं तो प्रक्रियाएं मर जाएंगी।

क्या आपके डेबियन-आधारित मशीन पर "पीएसओकेके" क्लस्टर का उपयोग करने से आपको कुछ भी रोक रहा है?

+0

हाय जोश, मेरे देर से उत्तर के लिए खेद है - आप सही हैं, यह केवल फोर्क क्लस्टर के लिए एक समस्या है। पीएसओकेके क्लस्टर भी मेरी डेबियन मशीन पर काम करते हैं - बस सोचा कि फोर्किंग तेज होगा। आपका बहुत बहुत धन्यवाद! – user625626

+2

यह फोर्क क्लस्टर के साथ एक मूर्खतापूर्ण निरीक्षण प्रतीत होता है। मैंने https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=15471 पर एक बग रिपोर्ट पोस्ट की है। ज़ोंबी प्रक्रियाएं अधिकतर हानिरहित होती हैं क्योंकि वे कोई संसाधन नहीं लेते हैं। वे बस प्रक्रिया तालिका में बैठे हैं ताकि माता-पिता की प्रक्रिया उनके बाहर निकलने की स्थिति की जांच कर सके। 'लाइब्रेरी (कांटा) प्रतीक्षा()' के साथ उनकी निकास स्थिति की जांच करना एक समय में ज़ोंबी को साफ करेगा (और प्रत्येक की निकास स्थिति मुद्रित करें)। – computermacgyver

+1

कांटा पैकेज अब उपलब्ध नहीं है। – russellpierce

2

शायद आपकी समस्या का उत्तर makeCluster() कमांड की मदद फ़ाइल में है।

फ़ाइल के निचले भाग में, यह लिखा गया है: स्टॉपक्लस्टर को कॉल करके श्रमिकों को बंद करना अच्छा अभ्यास है: हालांकि मजदूरों को सॉकेट के बाद सुनवाई करने के बाद स्वयं को समाप्त कर दिया जाएगा, जो इसे कमांड के लिए सुन रहे हैं, जो इसे अगर मास्टर आर सत्र पूरा हो गया है (या इसकी प्रक्रिया मर जाती है)।

समाधान बना रहा है (यह मेरे लिए काम कर रहा है) जब आप इसे बना रहे हों तो अपने क्लस्टर के लिए पोर्ट को परिभाषित करें।

cl <- makeCluster(2, type = cltype,port=yourPortNumber) 

दूसरा (उपयोगी नहीं हो सकता है) समाधान आपके सॉकेट के लिए टाइमआउट सेट कर रहा है। टाइमआउट चर सेकंड में है।

cl <- makeCluster(2, type = cltype,port=yourPortNumber,timeout=50) 

किसी भी मामले में, उद्देश्य बंदरगाहों को बंद करने या बंद करने मुख्य अनुसंधान प्रक्रिया इस करना होगा unavailable.either गर्तिका कनेक्शन बनाने के लिए होना चाहिए।

संपादित करें: मेरा मतलब था कि प्रक्रिया बंद होने वाले बंदरगाहों को बंद करना था। यह ओएस स्वतंत्र होना चाहिए। आप - showConnections(all = TRUE); का उपयोग करने का प्रयास कर सकते हैं। यह सभी कनेक्शन देगा। फिर आप closeAllConnections();

क्षमा करें अगर यह भी काम नहीं करता है।

+0

बंदरगाह संख्या निर्दिष्ट करना उबंटू पर मेरे लिए काम नहीं करता है। डेबियन का कौन सा संस्करण आप चल रहे हैं? –

+0

आपके संपादन के संबंध में: 'स्टॉपक्लस्टर (सीएल)' पहले ही बंदरगाहों को बंद कर देता है। यही कारण है कि प्रक्रियाओं को ज़ोंबी प्रक्रियाएं बनने का कारण बनता है। –

+0

closeAllConnections() PSOCK धागे के साथ विंडोज पर काम करता है – myloginid

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