2012-05-14 18 views
5

मैं पृष्ठभूमि में एक पर्ल स्क्रिप्ट के निष्पादित निम्न आदेशयूनिक्स पृष्ठभूमि प्रक्रिया असामान्य रूप से रुक

nohup perl myPerlSCript.pl >debug_log & 

का उपयोग कर कुछ ही मिनटों के बाद मैं

[1] + रूका

के रूप में स्थिति मिला

मैं इसे रोकने की उम्मीद नहीं कर रहा था, और न ही मुझे पता है कि इसे किसने रोक दिया। मैं इसे कैसे डिबग कर सकता हूं और पता लगा सकता हूं कि यह क्यों रुक गया? मैं वास्तव में यूनिक्स कमांड को डीबग करने में रुचि रखने में रूचि रखता हूं।

उत्तर

1

क्या आप किसी भी मौके से टीसीएसएच का उपयोग कर रहे हैं? टीसीएस वास्तव में एक अंतर्निहित नोहप कमांड के साथ आता है जिसमें मुझे पहले से ही बहुत सारी समस्याएं थीं, जो आप देख रहे सटीक व्यवहार को देख रहे थे।

यदि मामला है तो सीधे /usr/bin/nohup का उपयोग करने का प्रयास करें।

+0

नहीं, मैं tcsh का उपयोग नहीं कर रहा हूं। यह बाश है। – user703555

3

पृष्ठभूमि में चल रही प्रक्रिया को कई तरीकों से रोका जा सकता है। वे सब के सब इन संकेतों में से एक को शामिल:

  • SIGSTOP
  • SIGTSTP
  • SIGTTOU
  • SIGTTIN

SIGSTOP गंभीर है। यह unblockable, unignorable, unhandlable है। यह प्रक्रिया को रोकता है निश्चित रूप से SIGKILL इसे मार देगा। रोकथाम रोकने के लिए दूसरों को पृष्ठभूमि प्रक्रिया द्वारा संभाला जा सकता है।

  • एक संकेत kill(2) का उपयोग कर किसी अन्य प्रक्रिया द्वारा भेजा गया था, या खुद के लिए प्रक्रिया द्वारा raise(3) या kill(2)
  • का उपयोग कर प्रक्रिया टर्मिनल के लिए लिखने का प्रयास किया, और टर्मिनल विकल्प tostop सक्षम है (stty -a के उत्पादन को देखने के)। यह SIGTTOU उत्पन्न करता है।
  • प्रक्रिया ने टर्मिनल मोड को tcsetattr(3) या समतुल्य ioctl के साथ बदलने का प्रयास किया। (ये stty द्वारा दिखाए गए वही मोड हैं।) tostop ध्वज की वर्तमान स्थिति के बावजूद यह SIGTTOU उत्पन्न करता है।
  • प्रक्रिया को टर्मिनल से पढ़ने का प्रयास किया गया। यह SIGTTIN उत्पन्न करता है।

यह सूची शायद बहुत अपूर्ण है।

+0

धन्यवाद - क्या यह देखना संभव है कि इनमें से किन सिग्नल ने कम से कम '[1] + रोक दिया'? – Rup

+1

इसे बैश के बजाए zsh में चलाएं, यह आपको एक और विस्तृत संदेश देगा। उन सभी 4 के लिए बैश प्रिंट "स्टॉप"। –