Erlang 21

init




erlang

init

मॉड्यूल

इस में

मॉड्यूल सारांश

सिस्टम स्टार्टअप का समन्वय।

विवरण

यह मॉड्यूल प्रीलोडेड है और इसमें init सिस्टम प्रक्रिया के लिए कोड है जो सिस्टम के स्टार्टअप को समन्वित करता है। स्टार्टअप पर मूल्यांकन किया गया पहला फ़ंक्शन boot(BootArgs) , जहां BootArgs स्थानीय ऑपरेटिंग सिस्टम से Erlang रनटाइम सिस्टम को दिए गए कमांड-लाइन तर्कों की एक सूची है; erl(1)

init बूट स्क्रिप्ट पढ़ता है, जिसमें सिस्टम आरंभ करने के निर्देश हैं। बूट स्क्रिप्ट के बारे में अधिक जानकारी के लिए, script(4)

init में सिस्टम को पुनरारंभ करने, रिबूट करने और रोकने के लिए कार्य शामिल हैं।

निर्यात

बूट (BootArgs) -> no_return ()

प्रकार

Erlang रनटाइम सिस्टम शुरू करता है। इस फ़ंक्शन को कहा जाता है जब एमुलेटर शुरू किया जाता है और सिस्टम स्टार्टअप का समन्वय करता है।

BootArgs एमुलेटर झंडे, यानी झंडे और सादे तर्कों को छोड़कर सभी कमांड लाइन तर्क हैं; erl(1)

init कुछ झंडे की व्याख्या करता है, नीचे अनुभाग Command-Line Flags देखें। शेष झंडे ("उपयोगकर्ता के झंडे") और सादे तर्क init लूप में पास किए जाते हैं और क्रमशः get_arguments/0 और get_plain_arguments/0 कॉल करके पुनर्प्राप्त किए जा सकते हैं।

get_argument (ध्वज) -> {ठीक है, आर्ग} | त्रुटि

प्रकार

कमांड-लाइन उपयोगकर्ता फ़्लैग फ़्लैग से जुड़े सभी मान लौटाता है। यदि Flag कई बार प्रदान किया जाता है, तो प्रत्येक Values संरक्षित क्रम में वापस आ जाता है। उदाहरण:

% erl -a b c -a d
...
1> init:get_argument(a).
{ok,[["b","c"],["d"]]}

निम्नलिखित झंडे स्वचालित रूप से परिभाषित किए गए हैं और इस फ़ंक्शन का उपयोग करके पुनर्प्राप्त किए जा सकते हैं:

root

Erlang / OTP की स्थापना निर्देशिका, $ROOT :

2> init:get_argument(root).
{ok,[["/usr/local/otp/releases/otp_beam_solaris8_r10b_patched"]]}
progname

कार्यक्रम का नाम जिसने एरलांग शुरू किया:

3> init:get_argument(progname).
{ok,[["erl"]]}
home

होम निर्देशिका:

4> init:get_argument(home).
{ok,[["/home/harry"]]}

यदि कोई मान Flag के साथ संबद्ध है, तो error देता है।

get_arguments () -> झंडे

प्रकार

सभी कमांड लाइन झंडे और सिस्टम-परिभाषित झंडे get_argument/1 , get_argument/1

get_plain_arguments () -> [Arg]

प्रकार

स्ट्रिंग्स (संभवतः खाली) की सूची के रूप में किसी भी सादे कमांड-लाइन तर्कों को लौटाता है।

get_status () -> {InternalStatus, ProvidedStatus}

प्रकार

init प्रक्रिया की वर्तमान स्थिति का निरीक्षण किया जा सकता है। सिस्टम स्टार्टअप (इनिशियलाइज़ेशन) के दौरान, InternalStatus starting , और ProvidedStatus इंगित करता है कि बूट स्क्रिप्ट की कितनी दूर व्याख्या की गई है। बूट लिपि में व्याख्या की गई प्रत्येक {progress, Info} शब्द ProvidedStatus प्रभावित करता है, अर्थात, ProvidedStatus को Info का मूल्य मिलता है।

रिबूट () -> ठीक है

सभी एप्लिकेशन को आसानी से नीचे ले जाया जाता है, सभी कोड अनलोड किए जाते हैं, और सिस्टम समाप्त होने से पहले सभी पोर्ट बंद हो जाते हैं। यदि कमांड-लाइन फ्लैग -heart निर्दिष्ट किया गया था, तो heart प्रोग्राम सिस्टम को रिबूट करने का प्रयास करता है। अधिक जानकारी के लिए, heart(3)

शटडाउन समय को सीमित करने के लिए, समय के लिए -shutdown_time को एप्लिकेशन लेने में खर्च करने की अनुमति है, कमांड-लाइन फ्लैग -shutdown_time का उपयोग करना है।

पुनः आरंभ () -> ठीक है

सिस्टम को चल रहे एर्लांग नोड के अंदर पुनः आरंभ किया जाता है, जिसका अर्थ है कि एमुलेटर को पुनरारंभ नहीं किया गया है। सभी अनुप्रयोगों को सुचारू रूप से नीचे ले जाया जाता है, सभी कोड अनलोड किए जाते हैं, और सिस्टम शुरू होने से पहले फिर से उसी तरह बूट होने से पहले सभी पोर्ट बंद हो जाते हैं। वही BootArgs फिर से उपयोग किया जाता है।

शटडाउन समय को सीमित करने के लिए, समय के लिए -shutdown_time को एप्लिकेशन लेने में खर्च करने की अनुमति है, कमांड-लाइन फ्लैग -shutdown_time का उपयोग करना है।

script_id () -> आईडी

प्रकार

सिस्टम को बूट करने के लिए प्रयुक्त बूट स्क्रिप्ट की पहचान हो जाती है। Id किसी भी Erlang शब्द की हो सकती है। वितरित बूट स्क्रिप्ट में, Id {Name, Vsn} Name और Vsn तार हैं।

रोक () -> ठीक है

stop(0) समान stop(0)

रोक (स्थिति) -> ठीक है

प्रकार

सभी अनुप्रयोगों को सुचारू रूप से नीचे ले जाया जाता है, सभी कोड अनलोड किए जाते हैं, और सिस्टम बंद होने से पहले सभी बंदरगाहों को बंद कर दिया जाता है। यदि कमांड-लाइन फ़्लैग -heart निर्दिष्ट किया गया था, तो एर्लांग नोड समाप्त होने से पहले heart कार्यक्रम समाप्त हो गया है। अधिक जानकारी के लिए, heart(3)

शटडाउन समय को सीमित करने के लिए, समय के लिए -shutdown_time को एप्लिकेशन लेने में खर्च करने की अनुमति है, कमांड-लाइन फ्लैग -shutdown_time का उपयोग करना है।

कमान-लाइन झंडे

चेतावनी

संग्रह फ़ाइलों से कोड लोड करने का समर्थन प्रयोगात्मक है। तैयार होने से पहले इसे जारी करने का एकमात्र उद्देश्य प्रारंभिक प्रतिक्रिया प्राप्त करना है। फ़ाइल स्वरूप, शब्दार्थ, इंटरफ़ेस, और इसी तरह, भविष्य के रिलीज़ में बदला जा सकता है। -code_path_choice ध्वज भी प्रयोगात्मक है।

init मॉड्यूल निम्न कमांड-लाइन झंडे की व्याख्या करता है:

--

अगले झंडे तक सब कुछ -- सादा तर्क माना जाता है और get_plain_arguments/0 का उपयोग करके get_plain_arguments/0 पुनः प्राप्त किया जा सकता है।

-code_path_choice Choice

strict या relaxed लिए सेट किया जा सकता है। यह नियंत्रित करता है कि कोड पथ के प्रत्येक निर्देशिका की व्याख्या कैसे की जाए:

  • सख्ती से जैसा कि यह boot script में दिखाई देता है, या

  • init अधिक आराम से होना है और एक उपयुक्त निर्देशिका खोजने का प्रयास करें यदि यह एक नियमित ebin निर्देशिका और एक ebin फ़ाइल में एक ebin निर्देशिका से चुन सकता है।

जब आप boot script को संपादित किए बिना अभिलेखागार से कोड लोडिंग के साथ विस्तृत करना चाहते हैं तो यह ध्वज विशेष रूप से उपयोगी है। बूट स्क्रिप्ट की व्याख्या के बारे में अधिक जानकारी के लिए, script(4) । कोड सर्वर कैसे काम करता है इस पर ध्वज का भी एक समान प्रभाव पड़ता है; code(3) देखें code(3)

-epmd_module Module

नोड नामों के पंजीकरण और लुकअप के लिए मॉड्यूल का उपयोग करने के लिए निर्दिष्ट करता है। erl_epmd

-eval Expr

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

% erl -noshell -eval 'R = 16#1F+16#A0, io:format("~.16B~n", [R])' \\
-s erlang halt
BF

यदि एकाधिक -eval भाव अभिव्यक्त किए जाते हैं, तो उनका मूल्यांकन क्रमबद्ध रूप से किया जाता है। -eval अभिव्यक्तियों का मूल्यांकन क्रमिक रूप से -s और -run फ़ंक्शन कॉल के साथ किया जाता है (यह भी निर्दिष्ट क्रम में)। के साथ -s और -run , एक मूल्यांकन जो सिस्टम आरंभीकरण प्रक्रिया को समाप्त नहीं करता है।

-extra

निम्नलिखित सभी -extra को सादा तर्क माना जाता है और get_plain_arguments/0 का उपयोग करके पुनर्प्राप्त किया जा सकता है।

-run Mod [Func [Arg1, Arg2, ...]]

सिस्टम आरंभीकरण के दौरान निर्दिष्ट फ़ंक्शन कॉल का मूल्यांकन करता है। Func start करने के start चूक। यदि कोई तर्क प्रदान नहीं किया जाता है, तो फ़ंक्शन को माना जाता है Arity 0. नहीं तो इसे Arity 1 का माना जाता है [Arg1,Arg2,...] तर्क के रूप में सूची [Arg1,Arg2,...] को लेते हुए। सभी तर्क तार के रूप में पारित किए जाते हैं। यदि कोई अपवाद उठाया जाता है, तो एरलैंग एक त्रुटि संदेश के साथ बंद हो जाता है।

उदाहरण:

% erl -run foo -run foo bar -run foo bar baz 1 2

यह Erlang रनटाइम सिस्टम शुरू करता है और निम्नलिखित कार्यों का मूल्यांकन करता है:

foo:start()
foo:bar()
foo:bar(["baz", "1", "2"]).

कार्यों को एक प्रारंभिक प्रक्रिया में क्रमिक रूप से निष्पादित किया जाता है, जो तब सामान्य रूप से समाप्त हो जाता है और उपयोगकर्ता को नियंत्रण प्रदान करता है। इसका मतलब यह है कि एक -run कॉल जो ब्लॉक को वापस नहीं करता है आगे की प्रक्रिया; इससे बचने के लिए, ऐसे मामलों में spawn कुछ प्रकार का उपयोग करें।

-s Mod [Func [Arg1, Arg2, ...]]

सिस्टम आरंभीकरण के दौरान निर्दिष्ट फ़ंक्शन कॉल का मूल्यांकन करता है। Func start करने के start चूक। यदि कोई तर्क प्रदान नहीं किया जाता है, तो फ़ंक्शन को माना जाता है Arity 0. नहीं तो इसे Arity 1 का माना जाता है [Arg1,Arg2,...] तर्क के रूप में सूची [Arg1,Arg2,...] को लेते हुए। सभी तर्क परमाणुओं के रूप में पारित किए जाते हैं। यदि कोई अपवाद उठाया जाता है, तो एरलैंग एक त्रुटि संदेश के साथ बंद हो जाता है।

उदाहरण:

% erl -s foo -s foo bar -s foo bar baz 1 2

यह Erlang रनटाइम सिस्टम शुरू करता है और निम्नलिखित कार्यों का मूल्यांकन करता है:

foo:start()
foo:bar()
foo:bar([baz, '1', '2']).

कार्यों को एक प्रारंभिक प्रक्रिया में क्रमिक रूप से निष्पादित किया जाता है, जो तब सामान्य रूप से समाप्त हो जाता है और उपयोगकर्ता को नियंत्रण प्रदान करता है। इसका मतलब है कि एक एस -s कॉल जो ब्लॉक को वापस नहीं करता है आगे की प्रक्रिया; इससे बचने के लिए, ऐसे मामलों में spawn कुछ प्रकार का उपयोग करें।

परमाणुओं की सीमित लंबाई के कारण, इसके बजाय -run का उपयोग करने की अनुशंसा की जाती है।

उदाहरण

% erl -- a b -children thomas claire -ages 7 3 -- x y
...

1> init:get_plain_arguments().
["a","b","x","y"]
2> init:get_argument(children).
{ok,[["thomas","claire"]]}
3> init:get_argument(ages).
{ok, [["7","3"]]}
4> init:get_argument(silly).
error

यह भी देखें

erl_prim_loader(3) , heart(3)