Vinay
Vinay

Reputation: 1899

How to execute unix 'top' command with options in android

I am trying to execute 'top' command with following code which is working correctly:

try {


        Process proc = Runtime.getRuntime().exec("top");

        InputStream is = proc.getInputStream();

        BufferedReader reader = new BufferedReader(new InputStreamReader(is), 500);
        StringBuilder output = new StringBuilder();
        String line = "";
        int count = 0;
        while ((line = reader.readLine()) != null) {
            if(line.trim().equals(""))
                continue;
            if (line.trim().startsWith("User")) {
                count++;
                if (count > 2)
                    break; //'top' command keeps repeating call to itself. we need to stop after 1 call
            }
            if (line.contains("PID")) {
                mainInfo.append(output.toString());
                output.delete(0,output.length());
                continue;
            }


            output.append(line)
                    .append(CPUInfoUtil.SEPARATOR_LINE); //append this separator to help parsing

        }
        reader.close();
        proc.destroy();
        return output.toString();
    } catch (FileNotFoundException e) {

        return null;
    } catch (IOException e) {

        throw new RuntimeException(e);

    }

This is returning me all processes including kernel/root processes. I want to get only system processes except woner=root. For that I tried following 'top' with following options, which didn't work:

Process proc = Runtime.getRuntime().exec(new String[]{"top","U","!root"});

I know I can also get running processes using following code but it does not provide additional information that 'top' provides (e.g. Cpu%, thread count etc):

((ActivityManager) act.getSystemService(Context.ACTIVITY_SERVICE)).getRunningServices(Integer.MAX_VALUE);

Upvotes: 4

Views: 2730

Answers (2)

kukroid
kukroid

Reputation: 420

I am using

Process psProc = Runtime.getRuntime().exec("top -n 1 -d 5");

to get all the process running and then calculate CPU usage for android apps.

Upvotes: 0

Vinay
Vinay

Reputation: 1899

After doing a lot of homework I got this working! Following way 'top' can be used with as many options:

String[] cmd = {"sh","-c",
                "top -m 100 -n 1"
               };
Process proc = Runtime.getRuntime().exec(cmd);

I have use -m and -n options and its working great. See manual for whole list of options: 'top' options

Upvotes: 3

Related Questions