2010-01-25 9 views
5

$ killall -9 beam.smp चलाने के अलावा, जब मैं -sname जानता हूं तो मैं प्रोग्रामिंग के दौरान एरलांग नोड को कैसे मार सकता हूं?रोकें Erlang Daemon

यदि मैं नहीं चाहता कि दिल की धड़कन मॉनिटर प्रक्रिया को पुनरारंभ करने के लिए, मैं कैसे सुनिश्चित कर सकता हूं कि उपरोक्त प्रश्न के लिए जो भी उत्तर दिया गया है, वह दिल की धड़कन को भी मार देगा?

क्या एर्लांग को डिमन के रूप में तैनात करने के लिए कोई सभ्य मार्गदर्शिका है?

उत्तर

10

kill और killall साथ लगभग हमेशा गलत है।

आप काफी आसानी से का उपयोग कर बाहर निकलने के लिए दूरदराज के नोड पूछ सकते हैं:

rpc:call(RemoteNode, init, stop, []). 

मुझे लगता है कि यह पुन: प्रारंभ करने से heart को रोकने के बारे में निर्णय नहीं जानता, लेकिन मैं सुझाव देंगे कि आप उसे रोकने की उम्मीद करता है, तो , आपको इसे कभी-कभी-स्टॉप मोड में नहीं चलाया जाना चाहिए।

अद्यतन - जेड बताते हैं कि init:stopheart साथ सही काम करता है, तो ऊपर rpc:call यह करने के लिए सबसे अच्छा है और एक ही रास्ता है।

+3

"init: stop(): ... अगर-हार्ट कमांड लाइन ध्वज दिया गया था, तो दिल प्रोग्राम को एरलांग नोड टर्मिनेट से पहले समाप्त कर दिया गया है। ..." – Zed

+1

मुझे लगता है कि मेरे नोड्स काफी कनेक्ट नहीं हो रहे हैं। मुझे यकीन है कि मैं कुछ दिख रहा हूँ। परीक्षण करने के लिए, मैंने दो टर्मिनल विंडो खोली और एक में 'erl -sname foo' चलाया, फिर उस से कुकी प्राप्त की और' erl -sname bar -setcookie '...' 'चला गया। इस खिड़की में, मैंने 'net_adm भाग लिया: पिंग ('foo @ elife') 'लेकिन यह मुझे एक' pang 'दिया। मैंने इस पर कुछ प्रकार की कोशिश की है, सभी किस्मत के बिना। कोई विचार क्या मैं गलत कर रहा हूँ? – Eli

+0

आप '-setcookie' क्यों कर रहे हैं और दूसरे पर नहीं? अगर वे मेल नहीं खाते हैं, तो आप बात नहीं कर सकते। आम तौर पर, मैं बस अपने स्थानीय नोड पर '~/.erlang.cookie' का उपयोग करता हूं। – Dustin