2014-10-09 7 views
6

मैं इस नमूना कोड है।क्यों मेरी अवधि पर कब्जा कर लिया नहीं की जा रही है

समस्या यह है कि, टीईआरएम यहां पर कब्जा नहीं किया जा रहा है और प्रक्रिया को समाप्त कर दिया गया है।

ruby test.rb 
"sam  8828 0.0 0.0 30576 5052 pts/9 Rl+ 11:48 0:00 ruby -e trap('TERM'){ puts 'GOT TERM'; sleep 100; }; sleep 100\n" 
"" 

हालांकि ... मैं सिर्फ अंडे के बाद सोने और एक अलग प्रक्रिया अवधि के रूप में उम्मीद कब्जा कर लिया है से मार जारी है।

pid = Process.spawn("exec ruby -e \"trap('TERM'){ puts 'GOT TERM'; sleep 100; }; sleep 100\"") 
Thread.new do 
    Process.wait(pid) 
end 
puts pid 
sleep 100 

अन्य खोल

kill -TERM PID 

आउटपुट

GOT TERM 

इसके अलावा अधिक, अगर मैं करने के लिए प्रारंभिक प्रक्रिया से प्रक्रिया अपने हैंडलर अवधि में फंस नहीं रह मार डालेगा के बाद तो kill कोशिश यह।

यहां क्या हो रहा है, टीईआरएम माता-पिता से मेरे बच्चे की प्रक्रिया में सही तरीके से क्यों नहीं पहुंचाया जा रहा है?

+0

दिलचस्प ... आप किस ओएस पर हैं? मेरे लिए यह ठीक काम करता है (मैकोज़): ' 71794 0.0 0.1 2443544 2 9 32 एस 001 आर + 9:22 अपराह्न 0: 00.01 रूबी-एक जाल ('टीईआरएम') {डालता है 'टोरम'; नींद 100;}; नींद 100 \ n " मिल गया सावधि " 71794 0,6 0,2 2471356 8168 S001 एस + 21:22 0: 00.05 माणिक -e जाल ('TERM') {पुट 'TERM मिल गया', 100 सोने;}; सो 100 \ n " लिनक्स पर ' – moonfly

+0

... मुझे वास्तव में संदेह है कि यह लिनक्स विशिष्ट है और जिस तरह से" exec "संचालित होता है, एक दूसरा पिड शामिल हो रहा है –

+0

ऐसा लगता है कि कई पीआईडी ​​शामिल हो रहे हैं। मैं स्ट्रेस के माध्यम से व्यवहार की जांच कर रहा था, और आपकी स्क्रिप्ट के एक आमंत्रण के लिए पाया गया कुल 14 (1) पीआईडी ​​ट्रेस फाइलें बनाई गई थीं। – orangejulius

उत्तर

11

आह, मैं इसे,

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

kill -TERM #{pid} से पहले समस्या का समाधान करता है।

+1

वास्तव में हिंडसाइट में ट्रिविअल। :) 'Thread.pass' भी 'नींद' के बजाय काम कर सकता है, लेकिन फिर यह सिस्टम-निर्भर हो सकता है। – moonfly

+0

"हुक स्थापित करें" से आपका क्या मतलब है? अगर प्रक्रिया.स्पॉन एक पिड के साथ वापस आ गया है, तो प्रक्रिया को सिग्नल के लिए तत्काल ग्रहणशील नहीं होना चाहिए? –

+0

ओह, प्रक्रिया के अंदर बुलाया रूबी दुभाषिया अभी तक नहीं उभरा है ... gotcha। –

संबंधित मुद्दे