मृत सफलताओं को देखना संभव है?


13

इसमें man ps, यह स्पष्ट रूप से बताता है कि विभिन्न राज्यों में लिनक्स पर एक प्रक्रिया हो सकती है।

D    Uninterruptible sleep (usually IO)
R    Running or runnable (on run queue)
S    Interruptible sleep (waiting for an event to complete)
T    Stopped, either by a job control signal or because it is being traced.
W    paging (not valid since the 2.6.xx kernel)
X    dead (should never be seen)
Z    Defunct ("zombie") process, terminated but not reaped by its parent.

यहां तक ​​कि यद्यपि Xएक प्रक्रिया राज्य है, इसे कभी नहीं देखा जाना चाहिए। लेकिन क्या यह सही है? एक प्रक्रिया पर एक राज्य के रूप में देखने के लिए एक सैद्धांतिक तरीका है? या यह पूरी तरह से 100% असंभव है?


2
का उपयोग करना चाहिए और तथ्य यह है कि यह आदमी पृष्ठ में है कि यह वास्तव में यह देखने के लिए संभव है। मुझे नहीं पता कि कैसे या हालांकि।
terdon

जवाबों:


7

मैंने लिनक्स कर्नेल में थोड़ा गोता लगाया, बिना ज्ञान के कि यह अपने आंतरिक कोर या किसी बड़े सी ज्ञान में कैसे काम करता है। तो कृपया इस सिद्धांत के साथ अच्छा हो :)

DEADराज्य परिभाषित किया गया है https://github.com/torvalds/linux/blob/master/fs/proc/array.c#L141 और कम से प्रयोग किया जाता है https://github.com/torvalds/linux/blob/master/fs /exec.c#L974 केवल एक रिटर्न स्टेटस देने के लिए। तो इसका एकमात्र तरीका यह कभी भी देखा जा सकता है यदि आप https://github.com/torvalds/linux/blob/master/fs/exec.c#L986 (या बाद में जहाँ भी इस फ़ंक्शन को कॉल किया जाता है) के आसपास प्रक्रिया स्थिति की जाँच करें से ..)।

यदि आप एक मृत प्रक्रिया को मारने की कोशिश करते हैं तो इसे ध्यान में रखा जाएगा और https://github.com/torvalds/linux/blob/master/kernel/signal.c#L1363 पर ध्यान नहीं दिया जाएगा

तो सिद्धांत रूप में ... मुझे लगता है कि इसका उत्तर हां है। एक राज्य के रूप में एक्स सिद्धांत रूप में देखा जा सकता है, लेकिन शायद वास्तविक जीवन में कभी नहीं रहा है।

कृपया मुझे सही करें अगर / जहाँ मैं गलत हूँ .. मुझे इस बारे में निश्चित नहीं है ..


2
मैं इसेuntil sleep 0.4 & perl -e '$p = shift; while (1) {open A, "</proc/$p/stat" or last; $_=<A>; print}' $! | grep X; do :; done
स्टीफन चेज़लस

यहाँ प्रक्रिया (/proc/.../stat का आउटपुट) कैसा दिखता है; 4603 (sleep) X 0 -1 -1 0 -1 4202508 0 0 0 0 0 0 0 0 20 0 0 0 175042279 0 0 0 0 0 0 0 0 0 0 0 0 18446744071579306375 0 0 17 0 0 0 0 0 0.. सवाल का जवाब दिया। एक्स संभव है! धन्यवाद!
xeor

1

यहाँ एक का सबूत है कि हम सिर्फ एक लाइव सिस्टम पर भागे हैं:

$ sudo ps axf -O wchan
31103 -      R ?        00:00:00 /bin/bash /usr/local/bin/monitorcron taskA
31104 exit   X ?        00:00:00  \_ [su]

क्या आपको याद है कि अगर आप अगली बार भाग गए तो प्रक्रिया समाप्त हो गई ps?
हाईटेककंप्यूटरजेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.