का ग्रेसफुल शट डाउन मैं जेनसेवर के साथ एक एलीक्सिर ऐप लिख रहा हूं जो बूट पर बाहरी एप्लिकेशन शुरू करता है और इसे बंद कर देता है और बाहर निकलने पर अन्य क्लीन-अप करता है। मैंने कॉलबैक और क्लीनअप कोड terminate/2
कॉलबैक में बूटअप कार्यक्षमता जोड़ा है।जेनसेवर
init
कोड ठीक काम करता है जब GenServer शुरू कर दिया है, और जब :stop
संकेत मैन्युअल भेज दिया जाता है terminate
विधि भी कहा जाता है, लेकिन अप्रत्याशित शटडाउन और बीच में आता है के मामलों में (Ctrl + C मार के मामले में) आईईएक्स में, समाप्ति कोड नहीं कहा जाता है।
वर्तमान में, मैं मंच धागे, ब्लॉग पोस्ट और प्रलेखन के टन से अधिक चले गए हैं जिसमें शामिल हैं:
- Getting Started: GenServers
- Elixir-Lang-Talk: Graceful shutdown of GenServer(s) on exiting iex -S mix
- Elixir-Lang-Talk: Stopping Genserver vs Process.exit
GenServer
जब यह बाहर निकलता है फँसाने नहीं है यह अचानक ही कारण के साथ बाहर निकल जाएगा और इतनेterminate/2
फोन नहीं किसी भी प्रक्रिया से एक निकास संकेत (कि:normal
नहीं है) प्राप्त करता है। ध्यान दें कि प्रक्रिया डिफ़ॉल्ट रूप से जाल से बाहर निकलती है और बाहर निकलने वाला सिग्नल भेजा जाता है जब एक लिंक की गई प्रक्रिया निकलती है या उसका नोड डिस्कनेक्ट हो जाता है।इसलिए यह गारंटी नहीं है कि
terminate/2
कोGenServer
बाहर निकलने पर कॉल किया जाता है। ऐसे कारणों से, हम आम तौर पर निगरानी या स्वयं लिंक द्वारा उपयोग की जाने वाली अलग प्रक्रियाओं में होने के लिए महत्वपूर्ण क्लीन-अप नियमों की अनुशंसा करते हैं।
लेकिन मैं बिल्कुल पता नहीं कैसे प्राप्त करने के लिए किसी और :init.stop
, linked processes
या कुछ भी इस के साथ काम करने के लिए (के बाद से इस GenServers के साथ मेरी पहली बार है) है।
defmodule MyAwesomeApp do
use GenServer
def start do
GenServer.start_link(__MODULE__, nil)
end
def init(state) do
# Do Bootup stuff
IO.puts "Starting: #{inspect(state)}"
{:ok, state}
end
def terminate(reason, state) do
# Do Shutdown Stuff
IO.puts "Going Down: #{inspect(state)}"
:normal
end
end
MyAwesomeApp.start
'Process.flag (: trap_exit, true) 'मेरे लिए काम नहीं करता है। क्या आप कृपया बता सकते हैं कि मुझे इसे एक जेन्सेवर में कहां जाना है? – Sheharyar
आपको इसे प्रक्रिया में सेट करना चाहिए, जिसका अर्थ है 'init/1' – vfsoraki
कोशिश की गई है कि यह काम नहीं करता है। – Sheharyar