मेरे पास एक लंबी चल रही प्रक्रिया है और मुझे इसे एक और प्रक्रिया लॉन्च करने की आवश्यकता है (जो भी एक अच्छा समय के लिए चलाएगा)। मुझे केवल इसे शुरू करने की आवश्यकता है, और फिर इसके बारे में पूरी तरह से भूल जाओ।कैसे एक उपप्रजाति को आग और भूलना है?
प्रोग्रामिंग रूबी पुस्तक से कुछ कोड स्कूप करके मुझे जो कुछ चाहिए, वह करने में कामयाब रहा, लेकिन मैं सबसे अच्छा/सही तरीका ढूंढना चाहता हूं, और समझ रहा हूं कि क्या हो रहा है। यहाँ है कि मैं क्या शुरू में मिल गया है:
exec("whatever --take-very-long") if fork.nil?
Process.detach($$)
तो, यह तरीका है, या मैं उसे और कैसे करना चाहिए?
जवाब नीचे मैं इस कोड है, जो अधिक समझ बनाने के लिए लगता है के साथ समाप्त हो गया की जाँच के बाद:
(pid = fork) ? Process.detach(pid) : exec("foo")
मैं कैसे fork
काम करता है पर कुछ स्पष्टीकरण की सराहना करेंगे। [इसे पहले से मिला है]
$$
सही से अलग था? मुझे नहीं पता कि यह क्यों काम करता है, और मैं वास्तव में स्थिति की बेहतर समझ लेना चाहता हूं।
ठीक है, मुझे लगता है कि मुझे .nil मिला है? चेक। बच्चे में यह वास्तव में 0 नहीं लौटाता है, यह शून्य लौटाता है। तो यदि आप बच्चे में हैं तो निष्पादन चलाएगा। तो फिर, मैं कांटा की दूसरी वापसी कैप्चर कैसे करूं, जो कि बच्चे की प्रक्रिया की आईडी लौटाता है? इस तरह मैं $$ पर भरोसा करने के बजाय इसे सीधे इस्तेमाल कर सकता था। – kch
बस कांटा कॉल करें और परिणाम कैप्चर करें। तो अगर आपको शून्य मिलती है, तो निष्पादन करें, अन्यथा आप माता-पिता में हैं। – Alnitak
यह 'कांटा' की इतनी शानदार स्पष्ट और संक्षिप्त परिभाषा है। महान काम, धन्यवाद। – KomodoDave