2011-07-12 10 views
5

एक प्रक्रिया gdb द्वारा संलग्न किया जाता है, इस प्रक्रिया के स्टेट है "टी", जैसे:कैसे पता चलेगा कि कौन सी प्रक्रिया (स्टेटः टी) जीडीबी द्वारा जुड़ी है?

root  6507 0.0 0.0 67896 952 ?  Ss 12:01 0:00 /mytest 
root  6508 0.0 0.0 156472 7120 ?  Sl 12:01 0:00 /mytest 
root  26994 0.0 0.0 67896 956 ?  Ss 19:59 0:00 /mytest 
root  26995 0.0 0.0 156460 7116 ?  Tl 19:59 0:00 /mytest 
root  27833 0.0 0.0 97972 24564 pts/2 S+ 20:00 0:00 gdb /mytest 

ऊपर से, 26,995 debuging जा सकता है। मुझे कैसे पता चलेगा कि 26 99 5 डीबग है या नहीं? या मैं पता कर सकते हैं जो प्रक्रिया gdb द्वारा जुड़ा हुआ है (27833)

pstree -p 27,833 --- शो gdb (27833)

एक और सवाल: एक प्रक्रिया पता है कैसे (स्टेट: टी) द्वारा जुड़ा हुआ है कौन सा जीडीबी (पीआईडी)? अधिकांश सिडुएशन में, मैं उस पीसोन नहीं हूं जो प्रक्रिया को डीबग कर रहा है।

उत्तर

7

Tps आउटपुट में "ptrace() d" होने का खड़ा है। तो प्रक्रिया (26 99 5) का पता लगाया जा रहा है कुछ। यह कुछ अक्सर GDB, या strace होता है।

तो हाँ, यदि आप जानते हैं कि आप केवल GDB और नहीं strace चल रहे हैं, और आप T राज्य में एक भी प्रक्रिया देखते हैं, तो आप को पता आप उस प्रक्रिया को डिबग कर रहे हैं कि।

तुम भी GDB जो प्रक्रिया (ते) पूछ सकते यह डिबगिंग है:

(gdb) info process 
(gdb) info inferior 

अद्यतन मैथ्यू स्लेटरी के रूप में सही ढंग से बताया गया है, T अर्थ केवल यह प्रक्रिया बंद कर दिया है, और यह ptrace()d नहीं किया जा रहा है कि । प्रक्रिया 31069. यह उत्तर देता है दोनों "जो प्रक्रिया डिबगर किया जा रहा है" और "जो डिबगर द्वारा पता लगाया जा रहा है उत्पादन ऊपर से

grep '^TracerPid:' /proc/*/status | grep -v ':.0' 
/proc/7657/status:TracerPid: 31069 

आप उस प्रक्रिया को 7657 बता सकते हैं:

तो एक बेहतर समाधान यह करने के लिए है क्या डीबगिंग है "।

+1

'T' बस का अर्थ है" बंद कर दिया ", जरूरी नहीं कि" ptrace() डी "होने के नाते। उदाहरण के लिए, '10000 नींद' की कोशिश करें, Ctrl-Z दबाएं, फिर 'ps ux | grep नींद '। –

+0

धन्यवाद, आप काफी सही हैं। उत्तर अपडेट किया गया। –

+0

जीडीबी 7.8 में, 'जानकारी प्रक्रिया' अब मौजूद नहीं है। दोनों 'जानकारी proc' या' जानकारी प्रोग्राम 'दोनों पीआईडी ​​दिखाएं। –

0

आप इस जानकारी को ps axf आउटपुट से देख सकते हैं।

1357 ?  Ss  0:00 /usr/sbin/sshd 
1935 ?  Ss  0:00 \_ sshd: [email protected]/0 
1994 pts/0 Ss  0:00  \_ -bash 
2237 pts/0 T  0:00   \_ gdb /bin/ls 
2242 pts/0 T  0:00   | \_ /bin/ls 
2243 pts/0 R+  0:00   \_ ps axf 

यहाँ इस प्रक्रिया 2242 gdb प्रक्रिया द्वारा debuged की जा रही है 2237.

5

/proc फाइल सिस्टम लिनक्स की प्रतिभा ही डिजाइन है। कई प्रक्रिया रीयल-टाइम जानकारी /proc/{PID}/ से मिल सकती है।

एक और प्रश्न: प्रक्रिया को कैसे जानें (स्टेटः टी) जीडीबी (पीआईडी) से जुड़ा हुआ है? अधिकांश सिडुएशन में, मैं peoson नहीं हूं जो प्रक्रिया डीबग कर रहा है।

इस प्रश्न के लिए, हम उत्तर पाने के लिए/proc/{PID}/स्थिति फ़ाइल देख सकते हैं।

root  14616 0.0 0.0 36152 908 ?  Ss Jun28 0:00 /mytest 
root  14617 0.5 0.0 106192 7648 ?  Sl Jun28 112:45 /mytest 
tachyon 2683 0.0 0.0 36132 1008 ?  Ss 11:22 0:00 /mytest 
tachyon 4276 0.0 0.0 76152 20728 pts/42 S+ 11:22 0:00 gdb /mytest 
tachyon 2684 0.0 0.0 106136 7140 ?  Tl 11:22 0:00 /mytest 

host1-8> cat/proc/2684/स्थिति

Name: mytest 
State: T (tracing stop) 
SleepAVG:  88% 
Tgid: 2684 
Pid: 2684 
PPid: 2683 
TracerPid:  4276 
....... 

इस प्रकार हम जानते हैं कि 2684 की प्रक्रिया से डिबग है 4276.

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

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