Linux कमांड के अंत में "&" का क्या अर्थ है?


98

मैं एक सिस्टम प्रशासक हूं और मुझे सिस्टम को साफ करने के लिए एक लिनक्स स्क्रिप्ट चलाने के लिए कहा गया है।

आदेश यह है:

perl script.pl > output.log &

इसलिए यह आदेश एक &संकेत के साथ समाप्त हो रहा है , क्या इसका कोई विशेष महत्व है?

मुझे शेल का बुनियादी ज्ञान है, लेकिन मैंने ऐसा पहले कभी नहीं देखा।


खेद है कि मेरे बुरे होने पर, मुझे इस तरह के बुनियादी सामान के बारे में पता था
यार

3
यदि आप इस पृष्ठ पर हैं, तो इसके बीच का अंतर देख रहे हैं : &और पृष्ठभूमि में पहले कमांड को निष्पादित करता है; यदि यह सफलता के साथ बाहर निकलता है तो पहली कमांड निष्पादित करता है और सशर्त रूप से दूसरे के लिए आगे बढ़ता है। &&&&&
डेविड बोडो

जवाबों:


150

&आदेश पृष्ठभूमि में चलाने बनाता है।

से man bash:

यदि नियंत्रण ऑपरेटर द्वारा एक कमांड को समाप्त किया जाता है और , शेल एक उपधारा में पृष्ठभूमि में कमांड को निष्पादित करता है। शेल कमांड के समाप्त होने की प्रतीक्षा नहीं करता है, और रिटर्न स्थिति 0 है।


12

इसके अलावा, आप टर्मिनलों की न्यूनतम संख्या रखने के लिए एक (1) ssh कनेक्शन के माध्यम से कई प्रक्रियाओं को चलाने के लिए "&" चिन्ह का उपयोग कर सकते हैं। उदाहरण के लिए, मेरे पास एक प्रक्रिया है जो फ़ाइलों को निकालने के लिए संदेशों को सुनती है, दूसरी प्रक्रिया संदेशों को फ़ाइलों को अपलोड करने के लिए सुनती है: "&" का उपयोग करके मैं अपने सर्वर में एकल ssh कनेक्शन के माध्यम से एक टर्मिनल में दोनों सेवाएं चला सकता हूं ।


***** मुझे बस एहसास हुआ कि ssh सत्र बंद होने के बाद "&" के माध्यम से चलने वाली ये प्रक्रिया "जीवित रहना" भी होगा! बहुत साफ और उपयोगी है अगर सर्वर से आपका कनेक्शन बाधित है **


nohupप्रक्रियाओं को भी जीवित रखेगा।
जेरी चिन

2
के साथ और हम पीआईडी ​​प्राप्त कर सकते हैं और साथ ही हम प्रक्रिया को समाप्त कर सकते हैं यदि हम चाहें और हम उस प्रक्रिया की स्थिति भी जांच सकते हैं
धवल सोलंकी

12

जब नहीं बताया जाता है तो अन्यथा कमांड अग्रभूमि पर ले जाते हैं। आपके पास एकल शेल सत्र में केवल एक "अग्रभूमि" प्रक्रिया चल रही है। & प्रतीक आदेशों को एक पृष्ठभूमि प्रक्रिया में चलाने का निर्देश देता है और तुरंत अतिरिक्त आदेशों के लिए कमांड लाइन पर लौट आता है।

sh my_script.sh &

शेल सत्र बंद होने के बाद एक पृष्ठभूमि प्रक्रिया जीवित नहीं रहेगी । SIGHUP सभी चल रही प्रक्रियाओं को समाप्त करता है। वैसे भी डिफ़ॉल्ट रूप से। यदि आपका आदेश लंबे समय से चल रहा है या अनिश्चित काल तक चलता है (अर्थात: microservice) तो आपको इसे nohup के साथ pr-pend करने की आवश्यकता है, ताकि सत्र से डिस्कनेक्ट होने के बाद भी यह चालू रहे:

nohup sh my_script.sh &

संपादित करें: जब प्रयोग किया जाता है तो पृष्ठभूमि प्रक्रियाओं के समापन के बारे में एक ग्रे क्षेत्र प्रतीत होता है। बस इस बात से अवगत रहें कि शेल आपके OS और स्थानीय कॉन्फ़िगरेशन (विशेषकर CENTOS / RHEL पर) के आधार पर आपकी प्रक्रिया को बंद कर सकता है : https://serverfault.com/a/117157


2

मुझे यकीन नहीं है, लेकिन मैं अभी एक किताब पढ़ रहा हूं और मुझे जो मिल रहा है, वह यह है कि एक प्रोग्राम को अपने सिग्नल को संभालने की जरूरत है (जैसे जब मैं दबाता हूं CTRL-C)। अब एक प्रोग्राम SIG_IGNसभी संकेतों को अनदेखा करने या SIG_DFLडिफ़ॉल्ट कार्रवाई को पुनर्स्थापित करने के लिए उपयोग कर सकता है।

अब यदि आप करते हैं $ command &तो पृष्ठभूमि प्रक्रिया के रूप में चलने वाली यह प्रक्रिया केवल उन सभी संकेतों की अनदेखी करती है जो घटित होंगे। अग्रभूमि प्रक्रियाओं के लिए इन संकेतों को अनदेखा नहीं किया जाता है।

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