के साथ इंटरप्ट लूप मैं अधिक से अधिक प्रतिलिपि का उपयोग कर रहा हूं जहां मैं आमतौर पर बैश स्क्रिप्ट का उपयोग करता। एक छोटी परेशानी यह है कि इनमें से कई स्क्रिप्ट्स कुछ system()
कॉल पर लूप करती हैं जो कॉल को मूल रूप से मेरे नियंत्रण को पकड़ने के लिए छोड़ती है-सी अगर मैं इसे बाधित करने का प्रयास करता हूं। इसके बजाए यह सिस्टम कमांड को बंद कर देता है जो चल रहा था और अगले लूप पुनरावृत्ति पर जारी है।सिस्टम कमांड
for(i in 1:10) {
cat(i)
system('sleep 3')
}
अब तक मैं हमेशा बस प्रत्येक पाश में एक छोटा सा ठहराव डालने से यह चारों ओर हैक कर लिया है: उदाहरण के लिए, जब मैं नियंत्रण-सी दबाए रखकर निम्नलिखित में दखल देने की कोशिश, यह अभी भी यह सब पुनरावृत्तियों के माध्यम से करता है जैसे
for(i in 1:10) {
Sys.sleep(0.25)
cat(i)
system('sleep 3')
}
मुझे एक या दो यात्रा के भीतर गर्भपात अगर मैं नियंत्रण-सी दबाए रखें देंगे, लेकिन मैं सोच रहा हूँ, वहाँ एक और अधिक कुशल तरीके से इस व्यवहार को पूरा करने के लिए है?
शानदार सवाल। मैंने कुछ गोरस को पढ़ा है कि कोई भी अच्छी तरह से लिखित कार्यक्रम ब्रेक कीस्ट्रोक के लिए सुन रहा होगा, लेकिन ऐसा लगता है कि कई (और निश्चित रूप से मेरे सभी) उस सुविधा के साथ नहीं लिखे गए हैं। –
हाँ यहाँ वही! यह मुझे खराब करता है क्योंकि ये हाउसकीपिंग स्क्रिप्ट आमतौर पर प्रयोग निर्देशिका क्षेत्रों को स्थापित करने के लिए होती हैं, इसलिए बहुत तेज़ 'mkdir', 'chmod',' ln', आदि, कमांड का उपयोग करें। लेकिन जब मुझे 1000 विषयों के लिए ऐसा करना होता है, तब भी जब मैं एक रन चलाता हूं तो वहां केवल 5 मिनट के करीब कचरे में 0.25 सेकेंड विराम होता है। –
AFAIK एक आर लूप एक अलग प्रक्रिया नहीं है, इसलिए '% kill-9 $ PID' काम नहीं करेगा। लेकिन, मुझे पूछने दो: आपको मारने की क्या ज़रूरत है? यदि यह एक लूप खत्म हो गया है, तो 1: 10000 कहें, आप एक प्रॉम्प्ट() में डाल सकते हैं जो प्रत्येक 1000 चक्र चलाता है। यदि आप एक ऐसी स्क्रिप्ट चला रहे हैं जो बहुत लंबा है और आपने इसे शुरू करने के बाद अपना मन बदल दिया है, तो, यह आपकी खुद की गलती है :-)। –