पृष्ठभूमि की प्रक्रियाएं कभी-कभी अनायास क्यों बंद हो जाती हैं?


10

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

अगर मैं bgफिर से वही समस्या करता हूं ।

इसे ठीक करने का एकमात्र तरीका लगता है fg

ऐसा क्यों होता है?


आपका आउटपुट कहाँ जा रहा है? क्या आप कहीं बफर भर रहे हैं?
पॉल टॉम्बलिन

जवाबों:


12

यह आमतौर पर होता है अगर प्रक्रिया अपनी stdinधारा से पढ़ने की कोशिश करती है । जब प्रक्रिया पृष्ठभूमि में होती है, तो यह एक टीटीआईएन सिग्नल प्राप्त करती है और इस प्रकार स्थिर होती है ( एसटीपी सिग्नल के समान व्यवहार)। जब एक पृष्ठभूमि प्रक्रिया अपने टर्मिनल पर लिखने की कोशिश करती है तो दोहरे संकेत TTOU भी होता है।

इसे अग्रभूमि में लाना प्रक्रिया को फिर से शुरू करता है और इसे आपके टर्मिनल से पढ़ने की अनुमति देता है।

डेमो:

$ cat t.sh
#! /bin/sh
sleep 1
read dummy
$ ./t.sh &
[1] 3364
$ 
[1]+  Stopped                 ./t.sh
$ ps aux|grep t.sh
me  3364  0.0  0.0  11268  1200 pts/0    T    17:04   0:00 /bin/sh ./t.sh

इससे बचने के तरीकों में से एक का उपयोग करना है nohup, लेकिन यह अजीब प्रभाव हो सकता है यदि प्रोग्राम अपने इनपुट स्ट्रीम को पुनर्निर्देशित करने से निपटता नहीं है /dev/null

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