पृष्ठभूमि में एक लिनक्स प्रक्रिया शुरू करना


10

मैं एक स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो कुछ कार्यक्रम शुरू करता है

startup.sh

knetworkmanager
emesene
keepassx

समस्या यह है कि जब मैं स्क्रिप्ट चलाता हूं, तो यह केवल knetworkmanager शुरू होता है। ऐसा इसलिए है क्योंकि यह इसे शुरू करेगा, तब तक प्रतीक्षा करें जब तक कि यह समाप्त न हो जाए। मैं इसकी प्रतीक्षा किए बिना एक कार्यक्रम कैसे शुरू कर सकता हूं? मुझे नहीं लगता कि मैं प्रत्येक कमांड के बाद सिर्फ "&" जोड़ सकता हूं, क्योंकि स्क्रिप्ट समाप्त होने पर सभी प्रक्रियाएं अभी भी मार दी जाएंगी।

जवाबों:


16

जब स्क्रिप्ट चलाने वाला शेल बाहर निकलता है, तो यह आपके द्वारा शुरू की गई प्रक्रियाओं के लिए एक HUP संकेत भेजता है। यदि वे सिग्नल नहीं पकड़ते हैं, तो वे समाप्त कर देंगे। तो क्या सिर्फ इस्तेमाल करना और पर्याप्त करना आवेदन पर निर्भर करता है। सुरक्षित होने के लिए, नोह का उपयोग करें जैसे:

nohup your-program >>/dev/null 2>>/dev/null &

Nohup के लिए मैन पेज देखें और अधिक जानकारी के लिए मारें या nohup के बारे में विकिपीडिया लेख पढ़ें ।


फिर से पढ़ना, यह अस्पष्ट है कि ओपी कॉलिंग शेल से बाहर निकल रहा है या नहीं। वह केवल स्क्रिप्ट से बाहर निकलने का उल्लेख करता है, शेल या टर्मिनल से बाहर निकलने का नहीं।
एडम बेलायर 20

मेरे उत्तर को फिर से पढ़ते हुए, आप देखेंगे कि मैंने कहा था "जब स्क्रिप्ट चलाने वाला शेल बाहर निकलता है"। यह मानते हुए कि इस शेल का अपना वर्चुअल टर्मिनल है (सबस्क्रिप्शन या कुछ नहीं) यह सही है।
किम

@ किम: यह सच है। आपका उत्तर ठीक है, मुझे यकीन है कि ओपी कॉलिंग शेल को बंद कर रहा है या नहीं।
एडम बेलाएरे

10

नहीं, यदि आप उपयोग करते हैं तो स्क्रिप्ट समाप्त होने पर प्रक्रियाओं को नहीं मारा जाना चाहिए &। कोशिश करो।

knetworkmanager &
emesene &
keepassx &

2

आपके द्वारा दिए गए उदाहरण कार्यक्रमों के आधार पर, ऐसा लगता है कि आप केडीई लॉन्च होने पर कुछ कार्यक्रम शुरू करने की कोशिश कर रहे हैं। यदि हां, तो केडीई के ऑटोस्टार्ट फीचर पर एक नजर डालें। यह आलेख अधिक चर्चा करता है और ऑटोस्टार्ट में प्रोग्राम कैसे जोड़ें, इसके बारे में निर्देश देता है।


दरअसल, यही मैं करने की कोशिश कर रहा हूं। मैंने इसे अभी तय किया, धन्यवाद।
बार्ट वैन ह्युकेलोम सिप

1

जैसा कि अन्य लोगों ने कहा है, &जब शेल इसे चलाता है, तो पृष्ठभूमि में कमांड डालने के लिए ऑपरेटर का उपयोग करें ।

यदि आप चाहते हैं कि घटक पुर्जे क्रम से चलें (बल्कि सुगम तरीके से), लेकिन फिर भी पूरे को पृष्ठभूमि में रखना चाहते हैं, तो इस तरह उप-शेल का उपयोग करें:

(knetworkmanager; emesene; keepassx) &

या, यदि आप प्रत्येक भाग के संचालन को पिछले भाग के उपयोग की पर्याप्त पूर्ति के लिए सशर्त बनाना चाहते हैं:

(knetworkmanager && emesene && keepassx) &

0

प्रत्येक कमांड के बाद 'और' जोड़ना निश्चित रूप से काम करेगा। इसका मतलब यह होगा कि स्टार्टअप के खत्म होने के बाद भी वे स्क्रिप्ट या प्रोग्राम चलते रहेंगे।


0

एक अन्य विकल्प यह होगा कि प्रक्रिया को डेमॉन के रूप में शुरू किया जाए, जिसमें / sbin / start-stop-daemon का उपयोग किया जाए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.