2011-08-05 11 views
7

यदि किसी प्रक्रिया को वर्तमान में सिगट्रैप सिग्नल के कारण रोक दिया गया है और इसे मारने के माध्यम से सिगस्टॉप सिग्नल भेजा जाता है, तो डिफ़ॉल्ट व्यवहार क्या होगा? क्या सिगस्टॉप एक लंबित सिग्नल होगा जो प्रक्रिया को फिर से जारी रखने के बाद वितरित किया जाएगा? या यह सिर्फ त्याग दिया जाएगा/अनदेखा किया जाएगा?POSIX सिग्नल व्यवहार

यदि सिगस्टॉप कतारबद्ध है, तो उस प्रक्रिया के बाहर से कतार से इसे हटाने का कोई तरीका है, जैसे ट्रेसिंग प्रक्रिया में?

+0

मैं एक आधिकारिक उत्तर खोदने में सक्षम नहीं हूं। ओपनबीएसडी मैन पेज संकेत दे सकता है कि क्या हो सकता है, लेकिन निश्चित रूप से इसे एक तरफ या दूसरे का जवाब न दें। देखें http://www.openbsd.org/cgi-bin/man.cgi?query=sigaction&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html और http://www.openbsd.org/cgi-bin/man .cgi? query = sigsuspend & sektion = 2 और arch = i386 और apropos = 0 और manpath = OpenBSD + वर्तमान – wallyk

उत्तर

3

संकेत (7) आदमी पृष्ठ से:

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored. 

एक ऐप्लिकेशन से एक साधारण परीक्षण एक ब्रेकप्वाइंट पर बंद कर दिया है और यह एक SIGSTOP भेजने जब मैं हिट 'अगले' कुछ जानकारी प्रदर्शित gdb को दर्शाता है। संकेत स्पष्ट रूप से ऐप को दिया गया था। जब तक मैं इसे SIGCONT भेजता हूं तब तक इसे डीबग नहीं किया जा सकता है।

(gdb) next 
Program received signal SIGSTOP, Stopped (signal). 
fill (arr=0x7fffffffdff0, size=5) at tmp.cpp:28 
(gdb) next 
Program received signal SIGCONT, Continued. 
fill (arr=0x7fffffffdff0, size=5) at tmp.cpp:28 
(gdb) next 
(gdb) 
0

क्या मतलब है 'सिगट्रैप सिग्नल के कारण रुक गया'? एक सिगट्रैप एक प्रक्रिया को रोक नहीं पाएगा; डिफ़ॉल्ट रूप से यह कोर डंप के साथ समाप्त हो जाएगा, या आप सिग्नल को अनदेखा करने या सिग्नल हैंडलर को कॉल करने के लिए इसे बदल सकते हैं, लेकिन किसी भी मामले में SIGTRAP प्रक्रिया को स्वयं ही रोक नहीं पाएगा। हो सकता है कि आपके पास प्रक्रिया किसी अन्य प्रक्रिया (जैसे एक डीबगर) द्वारा पार्स (2) के साथ हो सकती है, इस मामले में यह सिगट्रैप देने से पहले ही रुक जाएगा, लेकिन उस स्थिति में यह पट्रेस के नियंत्रण में होगा और नहीं प्रक्रिया जारी रखने के लिए एक PTRACE_CONT या अन्य ptrace कार्रवाई होने तक जारी रखें।

+0

मैं एक और प्रक्रिया का पता लगा रहा हूं और एक डीबगर के रूप में कार्य कर रहा हूं, इसलिए जब प्रक्रिया ब्रेकपॉइंट पर जाती है तो इसे एक सिगट्रैप दिया जाएगा और प्रक्रिया बंद हो जाएगी। इसलिए मैं सिर्फ यह जानना चाहता हूं कि यह बंद हो गया है और क्या सिगट्रैप सिग्नल डिलीवर किया गया है, तो क्या होगा यदि सिगस्टॉप प्रक्रिया में पहुंचाया जाए तो क्या होगा? क्या यह लंबित होगा या प्रक्रिया को पहले ही बंद कर दिया जाएगा क्योंकि इसे अभी हटा दिया जाएगा? – ayelder

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