2013-03-25 13 views
10

द्वारा चल रही प्रक्रिया आईडी का पता लगाएं मैं एक स्क्रिप्ट पर काम कर रहा हूं जिसमें मुझे अपने आवेदन की पीआईडी ​​आपूर्ति करने की आवश्यकता है। मैं कमांड का पालन करके अपने पीआईडी ​​के साथ सभी प्रक्रियाओं को सूचीबद्ध करने में सक्षम हूं और मेरे आवेदन की प्रविष्टि देख सकता हूं।पैकेज नाम

adb शेल ps

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

adb शेल ps नाम: my_app_package

उत्तर

-1

ps द्वारा दिखाया प्रक्रियाओं ग्रेप के माध्यम से उत्पादन, कि पाठ की खोज करने के लिए प्रयोग किया जाता है एक फिल्टर पाइप द्वारा किसी भी उपयोगकर्ता से संबंधित उन लोगों के लिए सीमित किया जा सकता। उदाहरण के लिए, एक उपयोगकर्ता नाम एडम के साथ एक उपयोगकर्ता से संबंधित प्रक्रियाओं का पालन के साथ प्रदर्शित किया जा सकता है:

ps -ef | grep adam 

-e विकल्प के बारे में हर प्रक्रिया वर्तमान में चल जानकारी की एक सूची उत्पन्न करता है। -f विकल्प एक सूची उत्पन्न करता है जिसमें -l विकल्प की तुलना में प्रत्येक प्रक्रिया के लिए जानकारी के कम आइटम होते हैं।

+1

सभी प्रक्रियाओं लिस्टिंग 'एंड्रॉयड में ps' के लिए डिफ़ॉल्ट व्यवहार है, तो' -e' की जरूरत नहीं है है। और '-f' समर्थित नहीं है –

+0

+1 जबकि -फ grep का उपयोग करके अनावश्यक हो सकता है अच्छी सलाह है - कस्टम फ़िल्टर के लिए उपयोग कर सकते हैं ... – Dori

15

एंड्रॉयड 7.0 पैकेज का नाम डालने की प्रक्रिया आईडी पता लगाने के लिए सबसे आसान तरीका है pidof आदेश का उपयोग करने के लिए किया जाता है के बाद से: 7.0 लोगों के सामने

adb shell pidof my.app.package 

एंड्रॉयड में:

usage: pidof [-s] [-o omitpid[,omitpid...]] [NAME]... 

Print the PIDs of all processes with the given names. 

-s  single shot, only return one pid. 
-o  omit PID(s) 

बस इस तरह इसे चलाने ps कमांड का इस्तेमाल किया और फिर comm वैल्यू (जो एंड्रॉइड ऐप के लिए पैकेज नाम के अंतिम 15 वर्ण हैं) या grep कमांड द्वारा अंतर्निर्मित फ़िल्टर का उपयोग करके अपने आउटपुट को पार्स किया। comm फ़िल्टर काम नहीं करता है अगर नाम के अंतिम 15 वर्ण अंकों से शुरू हुए हैं और grep को Android 4.2 तक डिफ़ॉल्ट रूप से शामिल नहीं किया गया था। लेकिन उचित प्रक्रिया लाइन के बाद भी PID मूल्य निकाला जाने की आवश्यकता है।

ऐसा करने के कई तरीके थे।

adb shell "ps | sed -n 's/^[^ ]* *\([0-9]*\).* my\.app\.package$/\1/p'" 

फिर समस्या यह है कि sed Android 6.0 जब तक डिफ़ॉल्ट रूप से शामिल नहीं किया गया था है: यहां बताया प्रक्रिया खोजने और निकालने पीआईडी ​​एक भी sed आदेश के साथ किया जा सकता है।

लेकिन यदि आपको पुराने डिवाइस का उपयोग करना होगा तो आप हमेशा निम्न एंड्रॉइड संस्करण स्वतंत्र समाधान का उपयोग कर सकते हैं।

adb shell "for p in /proc/[0-9]*; do [[ $(<$p/cmdline) = my.app.package ]] && echo ${p##*/}; done" 

एक पीआईडी ​​की तलाश के लिए सबसे लोकप्रिय कारण kill जैसे कुछ अन्य आदेश में इसका उपयोग करना है: बस एंड्रॉयड खोल बनाया-इन - यह किसी भी बाहरी आदेशों का उपयोग नहीं करता है। आइए मान लें कि हमारे पास logcat के कई उदाहरण चल रहे हैं और हम उन्हें एक बार में सभी को गहन रूप से पूरा करना चाहते हैं।अभी पिछले आदेश में kill -2 साथ echo बदल देते हैं:

adb shell "for p in /proc/[0-9]*; do [[ $(<$p/cmdline) = logcat ]] && kill -2 ${p##*/}; done" 

' साथ " बदलें अगर लिनक्स/OSX खोल से आदेश चल रहा है।

+1

लंबे समय तक अपने पूर्ण पैकेज नाम का उपयोग करने का कोई तरीका? – slezica

+0

ps काम नहीं करता है अगर नाम थोड़ा लंबा, अजीब है। – yorkw

8

adb shell ps का उपयोग करने के बजाय, पहले adb shell दर्ज करें और फिर ps का उपयोग करें। कदम से

कदम:

  1. एक डिवाइस (या एमुलेटर) से जुड़ा हुआ है, जबकि adb shell आदेश डालें।
    (कमांड लाइन उपसर्ग इस आदेश को क्रियान्वित करने के बाद [email protected]:/ $ हो जाएगा।)

  2. दर्ज ps | grep <package_name_to_be_filtered> (अर्थात ps | grep com.google)।


C:> adb shell 
[email protected]:/ $ ps | grep com.google 
u0_a64 3353 2467 903744 52904 ffffffff 00000000 S com.google.process.location 
u0_a64 3426 2467 893964 49452 ffffffff 00000000 S com.google.process.gapps 
संबंधित मुद्दे