Nohup है, क्या nousr1 कमांड है?


12

मेरे नियमित कार्यक्रमों में से कई दुर्घटना (एक नियमित आधार पर) "उपयोगकर्ता परिभाषित संकेत 1" संदेश के साथ। मुझे पता है कि एक nohupकमांड है, लेकिन क्या कोई nousr1कमांड है? या ऐसा कुछ जो nohupयूएसआर 1 के साथ कुछ ऐसा करेगा लेकिन क्या होगा ?


3
बेहतर सवाल यह हो सकता है कि इसे usr1 सिग्नल पहली जगह पर क्या भेज रहा है? यदि कुछ नहीं है, तो निकास संदेश केवल भ्रामक हो सकता है।
अनुदान

2
लगता है जैसे आपको अपने "नियमित कार्यक्रमों" में कुछ गंभीर समस्याएं हो सकती हैं ... बस सिग्नल को अक्षम करना सही अनुप्रयोगों को ठीक से काम नहीं कर सकता है या अंतर्निहित कर सकता है। मैं दृढ़ता से सुझाव दूंगा कि आप चीजों को अक्षम करने से पहले अपने पर्यावरण की जांच करें।
mdpc

@Grant: मैं सहमत हूँ। क्या कोई उपयोगिता है जो मुझे बता सकती है कि ये संकेत क्या भेज रहे हैं?
user2624632

जवाबों:


3

उपयोगिता के अनुरूप होने के लिए एक सरल हैकी समाधान nohup, लेकिन इसके लिए SIGUSR1, कोरूटिल्स स्रोत की एक प्रति प्राप्त करना होगा , इसे अनलोड करना, करना

sed -i 's/SIGHUP/SIGUSR1/' /path/to/coreutils/src/nohup.c

, वैकल्पिक रूप से आउटपुट फ़ाइल नाम भी बदलते हैं

sed -i 's/nohup\.out/nousr1.out/g' /path/to/coreutils/src/nohup.c

, इस स्रोत को संकलित करें और नव-संकलित nohupबाइनरी को इनस्टॉल करें /usr/bin/nousr1:

cp /path/to/coreutils/src/nohup /usr/bin/nousr1

इसके बाद, जैसा कि मैंने जांच की, इस संकेत से sleep 1000बाहर निकलता है USR1, जबकि nousr1 sleep 1000इस संकेत के लिए प्रतिरक्षा है।


nohupवैसे, मुख्य कार्यक्षमता , टर्मिनल से प्रक्रिया को अलग करना है, इसलिए इसे SIGHUPपहली जगह में नहीं भेजा जाता है। यह भी एक सिग्नल हैंडलर सेट करता है एक अतिरिक्त बोनस है, लेकिन अनावश्यक होना चाहिए।
साइमन रिक्टर

@SimonRichter यदि आप signal(SIGHUP,SIG_IGN);कॉल हटाते हैं nohup.c, तो प्रक्रिया प्राप्त होगी SIGHUPnohupसिग्नल को नजरअंदाज करने से अलग क्या होता है सिर्फ स्टड, स्टडआउट, स्टेडर डिस्क्रिप्टर को गैर-टर्मिनल फाइलों के रूप में फिर से खोलना। यह वास्तव में किसी विशेष तरीके से टर्मिनल से प्रक्रिया को अलग नहीं करता है। यानी, SIGHUPटर्मिनल के लटकने पर यह प्रक्रिया भेजी जाएगी । दूसरी तरफ बैश है, जो disownकमांड के साथ समान काम करता है , लेकिन मुझे यकीन नहीं है कि यह कैसे लागू किया जाता है - शायद आपके मतलब के तरीके में।
रुस्लान

इससे काम अच्छा लगता है।
user2624632

8

शेल trapनिर्मित कमांड के बारे में कैसे ?

trap 'echo "Thou shalt not USR1 me"' USR1 

अच्छा विचार है, लेकिन यह काम नहीं किया। प्रक्रिया वैसे भी "उपयोगकर्ता परिभाषित संकेत 1" के साथ बाहर निकल गई।
user2624632

सिग्नल हैंडलर (SIG_IGN और SIG_DFL के अलावा) को बाल प्रक्रियाएं विरासत में नहीं मिली हैं।
किस्सा

2

आपको trapरिक्त तर्क के साथ कमांड के रूप का उपयोग करने की आवश्यकता है । इसे इस्तेमाल करे:

trap '' SIGUSR1; myprogram

यह SIGUSR1 सिग्नल की अनदेखी करेगा जो आप करने की कोशिश कर रहे हैं। हालांकि मैं टिप्पणीकारों से सहमत हूं कि आंख मिलने से ज्यादा शायद यहां चल रहा है।

गलत फॉर्म:

trap 'echo ...' SIGUSR1; myprogram

अभी भी myprogramSIGUSR1 प्राप्त करने की अनुमति देगा लेकिन शेल फिर कमांड echoसे निष्पादित करेगा trap


इससे काम अच्छा लगता है।
user2624632

उफ़, मैंने बहुत जल्द बात की। मैं भाग रहा था trap '' SIGUSR1; gvimdiff file1 file2और विम का "विम: कॉट डेडली सिग्नल यूएसआर 1" के साथ निधन हो गया।
user2624632

Hmmm, code.google.com/p/vim/source/browse/src/os_unix.c पर स्रोत-कोड को देखकर ऐसा लगता है कि VIM USR1 सिग्नल को फिर से सक्षम करता है और इसे एक घातक त्रुटि मानता है। आपकी एकमात्र आशा यह प्रतीत होगी कि यदि आप USR1 सिग्नल देने के लिए OS को मना कर सकते हैं। मुझे नहीं पता कि वहाँ कुछ है जो कि कार्यक्षमता प्रदान कर सकता है।
एड्रियन प्रैंक

यहाँ अधिक जानकारी: stackoverflow.com/q/4515274/41861
एड्रियन प्रैंक

एड्रियन प्रैंक: यह सिर्फ विम नहीं है; यह फ़ायरफ़ॉक्स और एक्वालंग और थंडरबर्ड और कुछ अन्य भी हैं। लेकिन अन्य ऐप नहीं, जैसे कि कोनो कंसोल, जो हमेशा के लिए चलता है।
user2624632
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.