2011-12-24 6 views
12

मैं एक एंड्रॉइड एप्लिकेशन कोडिंग कर रहा हूं। अब मैं एक ऐसे हिस्से में जा रहा हूं जहां आवेदन को एक प्रक्रिया को मारना चाहिए। लेकिन मुझे इसका पूरा नाम या पीआईडी ​​नहीं पता है। मैं आदेशों जानें:इसे पूरा करने के लिए किसी प्रक्रिया की पीआईडी ​​प्राप्त करें, इसके पूर्ण नाम को जानने के बिना

android.os.Process.killProcess(Pid) 

और

android.os.Process.getUidForName("com.android.email") 

लेकिन मेरी समस्या यह है कि मैं इस प्रक्रिया का पूरा नाम पता नहीं है है।

यह एक मूल कोड प्रक्रिया है, इसलिए नहीं

com.something.something की तरह कुछ प्रक्रिया /data/data/com.something.something/mybinary

है लेकिन यह आदेशों के साथ की तरह

/data/data/com.something.something/mybinary -a 123 -b 456 
क्योंकि मैं कर सकते हैं इस बात का

चल रहा है ' टी

android.os.Process.getUidForName("/data/data/com.something.something/mybinary") 

उत्तर

7

आप का उपयोग कर सकते हैं:

ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> services = manager.getRunningAppProcesses(); 
String service1name = services[1].processName; 

आप चल रहे सभी प्रक्रिया के पैकेज के नाम प्राप्त कर सकते हैं की जाँच सकें कि आप, को मारने service.pid से उस प्रक्रिया को प्राप्त प्रक्रिया आईडी चुनना चाहते हैं।

और कॉल:

android.os.Process.killProcess(service.pid); 
+0

लेकिन आप प्रबंधक ऑब्जेक्ट को कैसे प्रारंभ करते हैं, मैं समझ नहीं पाया। –

+1

गतिविधि प्रबंधक प्रबंधक = (गतिविधि प्रबंधक) getSystemService (Context.ACTIVITY_SERVICE) प्राप्त करें; इस तरह से आप इसे कैसे शुरू करते हैं। – AAnkit

+0

/data/data/com.something.something/mybinary –

-2

आप इस तरह ख़ाली कर सकते हैं:

Process p = Runtime.getRuntime().exec("ps"); 
p.waitFor(); 
StringBuffer sb = new StringBuffer(); 
InputStreamReader isr = new InputStreamReader(p.getInputStream()); 
int ch; 
char [] buf = new char[1024]; 
while((ch = isr.read(buf)) != -1) 
{ 
    sb.append(buf, 0, ch); 
} 
HashMap pMap = new HashMap<String, Integer>(); 
String [] processLinesAr = sb.toString().split("\n"); 
for(String line : processLinesAr) 
{ 
    String [] comps = line.split("[\\s]+"); 
    if(comps.length != 9) 
    return;   
    pid = Integer.parseInt(comps[1]); 
    packageName = comps[8]; 
    pMap.put(packageName, pid); 
    //... 
} 

तो फिर तुम sb पार्स करने और अपने प्रक्रिया के पीआईडी ​​मिल सकती है।

+0

यूरी im इस विधि कर यदि मेरे प्रक्रिया के साथ चल रहा है की जाँच करने के: अगर (sb.toString() indexOf ("डेटा/डेटा/myprocess")> 0।) लेकिन मैं sb कैसे पार्स प्राप्त करने के लिए कर सकते हैं प्रक्रिया का ढक्कन, मुझे पता है कि पिड प्रक्रिया के नाम के पीछे है, लेकिन मैं इसे – user1114653

+0

कैसे निकाल सकता हूं मैंने कोड जोड़ा है। – Yury

+0

mhh मैंने इसे निकाला है, इसे एक पूर्णांक बना दिया है, लेकिन मैं android.os.Process.killProcess (pid) के साथ इसे मारने की कोशिश कर रहा हूं; लेकिन यह काम नहीं किया। जब मैं खुद को मार रहा हूं: android.os.Process.killProcess (android.os.Process.myPid()); यह काम करता है लेकिन एक और पिड के साथ नहीं: एस – user1114653

1

अपनी प्रक्रिया का नाम '/data/data/com.something.something/mybinary' पहले प्राप्त प्रक्रिया देशी प्रक्रिया चल के शीर्ष के उत्पादन को पार्स और android.os.Process.killProcess (पीआईडी) तो का उपयोग करके आईडी है

   import org.apache.commons.exec.*; 
      import java.io.IOException; 
     public class NativeKillerRunnable implements Runnable { 
      private static final Logger logger = LoggerFactory.getLogger(NativeKillerRunnable.class); 
      @Override 
       public void run() { 
     String commandtoexec = "top -n 1 -m 100"; 
     CommandLine cmdLine = CommandLine.parse(commandtoexec); 
     DefaultExecutor executor = new DefaultExecutor(); 
     try { 
      PumpStreamHandler psh = new PumpStreamHandler(new LogOutputStream() { 
      @Override 
      protected void processLine(String s, int i) { 
       s = s.trim(); 
     //check for name of your binary process 
       if(s.contains("mybinary")) 
       { 
        String[] strings = s.split(" "); 
        android.os.Process.killProcess(Integer.parseInt(strings[0])); 
        logger.info("killed mybinary process with pid = "+strings[0]); 
       } 
      } 
     }); 
     executor.setStreamHandler(psh); 
     executor.execute(cmdLine); 
    } catch (ExecuteException executeException) { 
     logger.error("caught exception while killing mybinary process "+executeException.getMessage()); 
    } 
} 

}

0

मैं एक ही problem.Finally मिला है, मैं एंड्रॉयड जावा कोड के साथ अपने द्विआधारी प्रक्रिया को मारने के लिए एक विधि पाते हैं। पहले, एक txt फ़ाइल के लिए प्रक्रिया की जानकारी लिखें:

echo `ps | grep /data/data/com.something.something/mybinary` > /sdcard/pid.txt 

और उसके बाद, इस फ़ाइल को पढ़ने के लिए जावा कोड का उपयोग करें, आप स्ट्रिंग मिल सकता है जैसे:

root 17857 16409 87568 14880 ffffffff aaf0ec68 R /data/data/com.something.something/mybinary 

आप अपनी प्रक्रिया की पीआईडी ​​मिल गया है जावा में हत्या आदेश निष्पादित करें।