मैं यह कैसे निर्धारित करूं कि विंडोज पर "माता-पिता की कोई प्रक्रिया नहीं है"?


6

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

मुझे पता है कि सभी प्रक्रियाओं में तकनीकी रूप से एक माता-पिता होते हैं जो ओएस या जो कुछ भी नियंत्रित करते हैं, लेकिन सरलता के लिए "इसका कोई माता-पिता नहीं है"। उदाहरण के लिए, यदि आप एक एक्सप्लोरर विंडो खोलते हैं, तो यह उसके प्रोसेस ट्री के शीर्ष पर प्रोसेस एक्सप्लोरर में दिखाई देगा ।

जब मैं प्रक्रिया पर एक विकट क्वेरी करता हूं, हालांकि, मुझे 'parentProcessPID' के लिए PID मिलता है। जब मैं कोशिश करता हूं और टास्कलिस्ट का उपयोग करके उस पीआईडी ​​को देखता हूं, तो यह कहता है कि पीआईडी ​​को मान्यता नहीं है। मैंने इस तरह की कुछ प्रक्रियाओं पर ध्यान दिया है और उन्हें अलग-अलग मूल प्रक्रियाएँ लगती हैं जो टास्कलिस्ट के माध्यम से सभी दुर्गम हैं। यदि किसी प्रक्रिया में कोई पेरेंट प्रक्रिया होती है जो टास्कलिस्ट के माध्यम से अप्राप्य होती है, तो क्या इसका मतलब है कि यह उसके प्रोसेस ट्री के "शीर्ष" पर है?

मैं पूछ रहा हूं क्योंकि मैं खुद से चल रहे प्रोग्राम और दूसरे प्रोग्राम के चाइल्ड प्रोसेस के रूप में चल रहे प्रोग्राम के बीच अंतर करने की कोशिश कर रहा हूं।

उदाहरण के लिए:

मान लीजिए कि मैं विंडोज स्टार्ट मेनू में जाता हूं और एक एक्सप्लोरर विंडो खोलता हूं। फिर, मैं एक cmd विंडो खोलता हूं और टाइप करता हूं explorer.exe:। अब मेरे पास दो एक्स्प्लोरर हैं। एक cmd.exe की एक बच्चे की प्रक्रिया है और एक एक अकेले खड़े होने की प्रक्रिया है। मैं सक्षम होना चाहता हूं, एक विकी या टास्कलिस्ट क्वेरी के माध्यम से, सभी explorer.exeप्रक्रियाओं को एकल करने के लिए जो एक स्टैंड-अलोन प्रक्रिया है। इसलिए, मैंने विंडोज स्टार्ट मेनू के माध्यम से जो प्रक्रिया शुरू की थी उसे लौटाया जाना चाहिए न कि cmd.exe द्वारा शुरू की गई प्रक्रिया।

मैं इस मुद्दे पर चल रहा हूं कि हर प्रक्रिया की एक मूल प्रक्रिया आईडी होती है, और मुझे नहीं पता कि किसी प्रोग्राम से आने वाली मूल प्रक्रिया या OS से संबंधित प्रक्रिया से आने वाली मूल प्रक्रिया के बीच अंतर कैसे किया जाए। अगर मैं निम्नलिखित कर सकता हूं, तो यह बहुत अच्छा होगा:

स्यूडोकोड:

wmic process where name=explorer.exe get parentProcessID,processID
tasklist /fi "PID eq <parentProcessID>" 2>&1> log.txt
if(log.txt contains "INFO: No tasks are running which match the specified criteria."){
    // Parent PID is not recognized by tasklist
    // Do something
}

लेकिन मेरा तर्क सही है तो मैं अनिश्चित हूं।

जवाबों:


3

मुझे यकीन नहीं है कि इसे कमांड लाइन से कैसे किया जाए, लेकिन मैंने पावरशेल से ओएस से संबंधित प्रक्रियाओं को फ़िल्टर करने के लिए यह लिखा था। शायद यह आपको एक विचार देगा। यह सेवा, प्रणाली और शून्य के स्वामित्व वाली वस्तुओं को छोड़ देता है।

gwmi win32_process |select ProcessID,ParentProcessID,Name, @{l="Username";e={$_.getowner().user}}|where {$_.Username -ne "SYSTEM"} | where {$_.Username -ne "LOCAL SERVICE"} | where {$_.Username -ne "NETWORK SERVICE"} | where {$_.Username -ne $null} |Sort-Object ProcessID | ft -AutoSize
#

उत्पादन

    ProcessID ParentProcessID Name            Username
    --------- --------------- ----            --------
     2136     3460            notepad.exe     KNUCKLE-DRAGGER
     2504     3460            firefox.exe     KNUCKLE-DRAGGER
     2792      700            dllhost.exe     KNUCKLE-DRAGGER
     2816     4232            conhost.exe     KNUCKLE-DRAGGER
     2916     3460            powershell.exe  KNUCKLE-DRAGGER
     3128     3460            notepad.exe     KNUCKLE-DRAGGER
     3180      576            taskhost.exe    KNUCKLE-DRAGGER
     3196     4308            vmware-tray.exe KNUCKLE-DRAGGER
     3460     4392            explorer.exe    KNUCKLE-DRAGGER
     3644     4636            vmware-vmx.exe  KNUCKLE-DRAGGER
     3696     3460            mplayerc.exe    KNUCKLE-DRAGGER
     4636     3196            vmware.exe      KNUCKLE-DRAGGER
     4828     3460            notepad.exe     KNUCKLE-DRAGGER

और आप सूची 3460 के स्वामित्व में हैं में सबसे अधिक आइटम देख सकते हैं जो मेरे explorer.exe है
अंगुली-घसीटनेवाला

मैं अपने उदाहरण में अनुमान लगाता हूं, सभी प्रक्रियाएं सिस्टम, स्थानीय सेवा या नेटवर्क सेवा के स्वामित्व में नहीं होंगी। लेकिन, मैं जिन सभी प्रक्रियाओं को देखने का प्रयास कर रहा हूं, वे वास्तव में LOCAL SYSTEM उपयोगकर्ता के तहत चल रही विंडोज सेवा द्वारा बनाई गई हैं। तो भेदभाव को स्थानीय सिस्टम उपयोगकर्ता के तहत सत्र 0 में शुरू की गई दोनों प्रकार की प्रक्रियाओं के लिए काम करना पड़ता है।
user972276

आपको यह देखने की आवश्यकता है कि किन प्रक्रियाओं में मूल प्रक्रिया ID है जो मौजूद नहीं है। यानी, यदि explorer.exeमाता-पिता की प्रक्रिया को PPID के रूप में सूचीबद्ध किया गया है 5072, लेकिन 5072सिस्टम पर चलने वाले PID के साथ कोई प्रक्रिया नहीं है, तो आपके पास एक अवांछित प्रक्रिया है।
डारथ Android

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